Compare commits
2
Commits
5041ab1ea8
...
dadd14feb1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dadd14feb1 | ||
|
|
f96f687dd1 |
@@ -1,5 +1,8 @@
|
|||||||
# Binaries and build outputs
|
# Binaries and build outputs
|
||||||
/bin/
|
/bin/
|
||||||
|
/export-content
|
||||||
|
/api
|
||||||
|
/seed
|
||||||
|
|
||||||
# SQLite databases and WAL journal files
|
# SQLite databases and WAL journal files
|
||||||
*.db
|
*.db
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ seed: build
|
|||||||
./$(BIN_DIR)/seed --db $(DB_PATH) --seed-dir seed/data
|
./$(BIN_DIR)/seed --db $(DB_PATH) --seed-dir seed/data
|
||||||
|
|
||||||
export-content: build
|
export-content: build
|
||||||
|
@echo "⚠️ Notice: Frontend has migrated to real-time dynamic runtime fetching (force-dynamic)."
|
||||||
|
@echo "export-content is deprecated to prevent re-introducing static content data files."
|
||||||
./$(BIN_DIR)/export-content --db $(DB_PATH) --out-dir ../refer_landing_page/content
|
./$(BIN_DIR)/export-content --db $(DB_PATH) --out-dir ../refer_landing_page/content
|
||||||
|
|
||||||
fmt:
|
fmt:
|
||||||
|
|||||||
@@ -50,9 +50,17 @@ func main() {
|
|||||||
|
|
||||||
dbPath := flag.String("db", defaultDB, "Path to SQLite database file")
|
dbPath := flag.String("db", defaultDB, "Path to SQLite database file")
|
||||||
targetDir := flag.String("out-dir", "../refer_landing_page/content", "Target content directory")
|
targetDir := flag.String("out-dir", "../refer_landing_page/content", "Target content directory")
|
||||||
|
force := flag.Bool("force", false, "Force export content files despite dynamic runtime architecture")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
log.Printf("Exporting content from SQLite (%s) to TypeScript files in %s...", *dbPath, *targetDir)
|
if !*force {
|
||||||
|
log.Printf("⚠️ NOTICE: Frontend architecture has migrated to real-time dynamic runtime fetching (force-dynamic).")
|
||||||
|
log.Printf("Exporting static TypeScript files to %s is DEPRECATED to prevent re-introducing static fallback leaks.", *targetDir)
|
||||||
|
log.Printf("If you really need to export fallback files, pass the --force flag.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Exporting content from SQLite (%s) to TypeScript files in %s (forced)...", *dbPath, *targetDir)
|
||||||
database, err := db.Connect(*dbPath)
|
database, err := db.Connect(*dbPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Failed to connect to database: %v", err)
|
log.Fatalf("Failed to connect to database: %v", err)
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { researchProjects as staticProjects } from "../../content/projects";
|
|
||||||
import type { ResearchProject } from "../../content/types";
|
import type { ResearchProject } from "../../content/types";
|
||||||
import ProjectPageViewControls from "./ProjectPageViewControls";
|
import ProjectPageViewControls from "./ProjectPageViewControls";
|
||||||
|
|
||||||
@@ -8,7 +7,7 @@ interface ProjectPageViewProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function ProjectPageView({ projects: projectsProp }: ProjectPageViewProps = {}) {
|
export function ProjectPageView({ projects: projectsProp }: ProjectPageViewProps = {}) {
|
||||||
const projects = projectsProp ?? staticProjects;
|
const projects = projectsProp ?? [];
|
||||||
const slugs = projects.map((p) => p.slug);
|
const slugs = projects.map((p) => p.slug);
|
||||||
const trackId = "research-projects-track";
|
const trackId = "research-projects-track";
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import { semesters as staticSemesters } from "../../content/lectures";
|
|
||||||
import { getSemesters } from "../../lib/api";
|
import { getSemesters } from "../../lib/api";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
@@ -11,7 +10,7 @@ export const metadata: Metadata = {
|
|||||||
export const dynamic = "force-dynamic";
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
export default async function LecturesPage() {
|
export default async function LecturesPage() {
|
||||||
const semesters = (await getSemesters()) ?? staticSemesters;
|
const semesters = (await getSemesters()) ?? [];
|
||||||
|
|
||||||
const recentSemesters = semesters.slice(0, 3);
|
const recentSemesters = semesters.slice(0, 3);
|
||||||
const olderSemesters = semesters.slice(3);
|
const olderSemesters = semesters.slice(3);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import { activeMembers as staticMembers, alumni as staticAlumni } from "../../content/members";
|
|
||||||
import { getMembers, getAlumni } from "../../lib/api";
|
import { getMembers, getAlumni } from "../../lib/api";
|
||||||
import { ProfessorDetailsDialog } from "./_components/ProfessorDetailsDialog";
|
import { ProfessorDetailsDialog } from "./_components/ProfessorDetailsDialog";
|
||||||
|
|
||||||
@@ -22,8 +21,8 @@ const DEGREE_LABEL: Record<string, string> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export default async function MembersPage() {
|
export default async function MembersPage() {
|
||||||
const activeMembers = (await getMembers()) ?? staticMembers;
|
const activeMembers = (await getMembers()) ?? [];
|
||||||
const alumni = (await getAlumni()) ?? staticAlumni;
|
const alumni = (await getAlumni()) ?? [];
|
||||||
|
|
||||||
const phdStudents = activeMembers.filter(
|
const phdStudents = activeMembers.filter(
|
||||||
(m) =>
|
(m) =>
|
||||||
|
|||||||
@@ -2,31 +2,10 @@ import React from "react";
|
|||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import HeroComposition from "./_components/HeroComposition";
|
import HeroComposition from "./_components/HeroComposition";
|
||||||
import { ProjectPageView } from "./_components/ProjectPageView";
|
import { ProjectPageView } from "./_components/ProjectPageView";
|
||||||
import { publications as staticPubs, patents as staticPatents } from "../content/publications";
|
|
||||||
import { standardsBodies as staticStandards } from "../content/standards";
|
|
||||||
import { researchProjects as staticProjects } from "../content/projects";
|
|
||||||
import { getStatsSummary, getResearchAreaNames, getResearchProjects } from "../lib/api";
|
import { getStatsSummary, getResearchAreaNames, getResearchProjects } from "../lib/api";
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
// CUSTOMIZATION HOOK: 14 Core Research Areas
|
|
||||||
const RESEARCH_AREAS: string[] = [
|
|
||||||
"Quick UDP Internet Connection (QUIC)",
|
|
||||||
"QUIC-based Mobility and Multi-Streaming Support",
|
|
||||||
"Services and Protocols for Internet-of-Things (IoT)",
|
|
||||||
"Constrained Application Protocol (CoAP)",
|
|
||||||
"In-Vehicle Infotainment (IVI)",
|
|
||||||
"Optical Wireless or Visible Light Communications (OWC/VLC)",
|
|
||||||
"Lighting Control Networks (PLASA E1.45) for LED-based VLC",
|
|
||||||
"Mobility Management: Distributed Mobility Control",
|
|
||||||
"Multicast Routing Protocols and Reliable Multicasting",
|
|
||||||
"mobile SCTP (mSCTP): Soft Handover in Transport Layer",
|
|
||||||
"Stream Control Transmission Protocol (SCTP)",
|
|
||||||
"Telecommunication Optimization: Network Planning and Management",
|
|
||||||
"TAC/TAL Configuration for Paging and Location Management",
|
|
||||||
"Tabu Search and Genetic Algorithm",
|
|
||||||
];
|
|
||||||
|
|
||||||
const INTERNATIONAL_SDOS = [
|
const INTERNATIONAL_SDOS = [
|
||||||
"IEC TC100: Multimedia Systems and Equipment",
|
"IEC TC100: Multimedia Systems and Equipment",
|
||||||
"ISO/IEC JTC1/SC41: Internet-of-Things (IoT) Applications",
|
"ISO/IEC JTC1/SC41: Internet-of-Things (IoT) Applications",
|
||||||
@@ -37,19 +16,13 @@ const INTERNATIONAL_SDOS = [
|
|||||||
|
|
||||||
export default async function HomePage() {
|
export default async function HomePage() {
|
||||||
const stats = (await getStatsSummary()) ?? {
|
const stats = (await getStatsSummary()) ?? {
|
||||||
intlPubsCount: staticPubs.filter(
|
intlPubsCount: 0,
|
||||||
(p) => p.category === "intl-journal-conf"
|
patentCount: 0,
|
||||||
).length,
|
stdDocsCount: 0,
|
||||||
patentCount: staticPatents.length,
|
|
||||||
stdDocsCount: staticStandards.reduce(
|
|
||||||
(sum, b) =>
|
|
||||||
sum + b.projects.reduce((pSum, p) => pSum + p.documents.length, 0),
|
|
||||||
0
|
|
||||||
),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const researchAreas = (await getResearchAreaNames()) ?? RESEARCH_AREAS;
|
const researchAreas = (await getResearchAreaNames()) ?? [];
|
||||||
const researchProjects = (await getResearchProjects()) ?? staticProjects;
|
const researchProjects = (await getResearchProjects()) ?? [];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="container-content space-y-16 md:space-y-24 pt-10 md:pt-16 pb-16 md:pb-24">
|
<div className="container-content space-y-16 md:space-y-24 pt-10 md:pt-16 pb-16 md:pb-24">
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import React from "react";
|
|||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import { notFound } from "next/navigation";
|
import { notFound } from "next/navigation";
|
||||||
import { CategoryNav } from "../_components/CategoryNav";
|
import { CategoryNav } from "../_components/CategoryNav";
|
||||||
import { publications as staticPubs, patents as staticPatents } from "../../../content/publications";
|
|
||||||
import { getPublications, getPatents } from "../../../lib/api";
|
import { getPublications, getPatents } from "../../../lib/api";
|
||||||
import { PUB_CATEGORIES } from "../../../content/categories";
|
import { PUB_CATEGORIES } from "../../../content/categories";
|
||||||
import { PubCategory } from "../../../content/types";
|
import { PubCategory } from "../../../content/types";
|
||||||
@@ -36,8 +35,8 @@ export default async function PublicationCategoryPage({ params }: PageProps) {
|
|||||||
|
|
||||||
const slug = category as PubCategory;
|
const slug = category as PubCategory;
|
||||||
|
|
||||||
const publications = (await getPublications()) ?? staticPubs;
|
const publications = (await getPublications()) ?? [];
|
||||||
const patents = (await getPatents()) ?? staticPatents;
|
const patents = (await getPatents()) ?? [];
|
||||||
|
|
||||||
const counts = {
|
const counts = {
|
||||||
"intl-journal-conf": publications.filter((p) => p.category === "intl-journal-conf").length,
|
"intl-journal-conf": publications.filter((p) => p.category === "intl-journal-conf").length,
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { PUB_CATEGORIES } from "../../../content/categories";
|
import { PUB_CATEGORIES } from "../../../content/categories";
|
||||||
import { publications as staticPubs, patents as staticPatents } from "../../../content/publications";
|
|
||||||
import { PubCategory } from "../../../content/types";
|
import { PubCategory } from "../../../content/types";
|
||||||
|
|
||||||
export interface CategoryCounts {
|
export interface CategoryCounts {
|
||||||
@@ -20,8 +19,7 @@ export function CategoryNav({ currentCategory, counts }: CategoryNavProps) {
|
|||||||
if (counts?.[slug as keyof CategoryCounts] !== undefined) {
|
if (counts?.[slug as keyof CategoryCounts] !== undefined) {
|
||||||
return counts[slug as keyof CategoryCounts]!;
|
return counts[slug as keyof CategoryCounts]!;
|
||||||
}
|
}
|
||||||
if (slug === "patent") return staticPatents.length;
|
return 0;
|
||||||
return staticPubs.filter((p) => p.category === slug).length;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import { CategoryNav } from "./_components/CategoryNav";
|
import { CategoryNav } from "./_components/CategoryNav";
|
||||||
import { publications as staticPubs, patents as staticPatents } from "../../content/publications";
|
|
||||||
import { getPublications, getPatents } from "../../lib/api";
|
import { getPublications, getPatents } from "../../lib/api";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
@@ -11,8 +10,8 @@ export const metadata: Metadata = {
|
|||||||
export const dynamic = "force-dynamic";
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
export default async function PublicationsIndexPage() {
|
export default async function PublicationsIndexPage() {
|
||||||
const publications = (await getPublications()) ?? staticPubs;
|
const publications = (await getPublications()) ?? [];
|
||||||
const patents = (await getPatents()) ?? staticPatents;
|
const patents = (await getPatents()) ?? [];
|
||||||
|
|
||||||
const counts = {
|
const counts = {
|
||||||
"intl-journal-conf": publications.filter((p) => p.category === "intl-journal-conf").length,
|
"intl-journal-conf": publications.filter((p) => p.category === "intl-journal-conf").length,
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import { standardsBodies as staticStandards } from "../../content/standards";
|
|
||||||
import { getStandardsBodies } from "../../lib/api";
|
import { getStandardsBodies } from "../../lib/api";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
@@ -11,7 +10,7 @@ export const metadata: Metadata = {
|
|||||||
export const dynamic = "force-dynamic";
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
export default async function StandardizationPage() {
|
export default async function StandardizationPage() {
|
||||||
const standardsBodies = (await getStandardsBodies()) ?? staticStandards;
|
const standardsBodies = (await getStandardsBodies()) ?? [];
|
||||||
return (
|
return (
|
||||||
<div className="container-content py-8 sm:py-12 space-y-10 sm:space-y-14">
|
<div className="container-content py-8 sm:py-12 space-y-10 sm:space-y-14">
|
||||||
{/* Page Header */}
|
{/* Page Header */}
|
||||||
|
|||||||
@@ -1,804 +0,0 @@
|
|||||||
// AUTO-GENERATED by backend/cmd/export-content — DO NOT EDIT BY HAND
|
|
||||||
import { Semester } from "./types";
|
|
||||||
|
|
||||||
export const semesters: Semester[] = [
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2026,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 0414",
|
|
||||||
"en": "Computer Networks"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 0401",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2025,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 0432",
|
|
||||||
"en": "Topics in Software"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 0402",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2025,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "ITEC 0201",
|
|
||||||
"en": "Introduction to Computer Science and Engineering"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 0312",
|
|
||||||
"en": "Network Programming"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 0401",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 0461",
|
|
||||||
"en": "Problem-based Engineering Training Experiment"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2024,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 0432",
|
|
||||||
"en": "Topics in Software"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "BIDA 0201",
|
|
||||||
"en": "Big Data Convergence Project"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 0402",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 0460",
|
|
||||||
"en": "Problem-based Engineering Training Experiment"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2024,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "BIDA 0201",
|
|
||||||
"en": "Big Data Convergence Project"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 0401",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2023,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "SABBATICAL",
|
|
||||||
"en": "No Class (Sabbatical)",
|
|
||||||
"note": "Sabbatical"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2023,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 0312",
|
|
||||||
"en": "Network Programming"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "BIDA 0201",
|
|
||||||
"en": "Big Data Convergence Project"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "CICT 0703",
|
|
||||||
"en": "Software Convergence Project 3"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2022,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "CLTR 273001",
|
|
||||||
"en": "Problem Solving and Computing"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 432001",
|
|
||||||
"en": "Topics in Software"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401001",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2022,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 312002",
|
|
||||||
"en": "Network Programming"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402001",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 460001",
|
|
||||||
"en": "Problem-based Engineering Training Experiment"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "CICT 701001",
|
|
||||||
"en": "Software Convergence Project 1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2021,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "ITEC 402001",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2021,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "CLTR 273001",
|
|
||||||
"en": "Problem Solving and Computing"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "GLSO 218001",
|
|
||||||
"en": "Software Convergence Design 1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402001",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 778001",
|
|
||||||
"en": "Advanced Mobile Computing"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2020,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "ITEC 401003",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401004",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "GLSO 228001",
|
|
||||||
"en": "Topics in Software Convergence IV"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2020,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "ITEC 401016",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402003",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 778001",
|
|
||||||
"en": "Advanced Mobile Computing"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2019,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 432001",
|
|
||||||
"en": "Topics in Software"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401003",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402016",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2019,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "ITEC 201010",
|
|
||||||
"en": "Introduction to Computer Science and Engineering"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401016",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402003",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2018,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "ITEC 401005",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402017",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2018,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "ITEC 401021",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402006",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2017,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 432001",
|
|
||||||
"en": "Topics in Software"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "GLSO 213001",
|
|
||||||
"en": "Creative Convergence Design"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401003",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2017,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 312001",
|
|
||||||
"en": "Network Programming"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401018",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402005",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COME 742001",
|
|
||||||
"en": "Advanced Computer Networks"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2016,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 432001",
|
|
||||||
"en": "Topics in Software"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COME 331013) and DS Applications (COMP 216002",
|
|
||||||
"en": "Data Structures"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401004",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402016",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2016,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 414003",
|
|
||||||
"en": "Computer Networks"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401031",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402005",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402006",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2015,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 432001",
|
|
||||||
"en": "Topics in Software"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401006",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401007",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402022",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2015,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "ITEC 201009",
|
|
||||||
"en": "Introduction to Computer Science and Engineering"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 312001",
|
|
||||||
"en": "Network Programming"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 312002",
|
|
||||||
"en": "Network Programming"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401021",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402004",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2014,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "ITEC 401006",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402021",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COME 742001",
|
|
||||||
"en": "Advanced Computer Networks"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2014,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 414002",
|
|
||||||
"en": "Computer Networks"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402004",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2013,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "ITEC 401005",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402017",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2013,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 432001",
|
|
||||||
"en": "Topics in Software"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 402005",
|
|
||||||
"en": "Capstone Design Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2012,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 432001",
|
|
||||||
"en": "Topics in Software"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ITEC 401003",
|
|
||||||
"en": "Capstone Design Project I"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 422021",
|
|
||||||
"en": "Senior Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2012,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 214002",
|
|
||||||
"en": "Web Programming Design"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 749001",
|
|
||||||
"en": "Computer Network Protocols"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ELEC 957001",
|
|
||||||
"en": "Next Generation Internet Technology"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2011,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COME 311003",
|
|
||||||
"en": "Probability and Statistics: Class 1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COME 311004",
|
|
||||||
"en": "Probability and Statistics: Class 2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 764001",
|
|
||||||
"en": "Internet Computing"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 432001",
|
|
||||||
"en": "Topics in Software"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2011,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COMP 214001",
|
|
||||||
"en": "Web Programming Design: Class 1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 214002",
|
|
||||||
"en": "Web Programming Design: Class 2"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2010,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COME 311003",
|
|
||||||
"en": "Probability and Statistics"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COME 331004",
|
|
||||||
"en": "Data Structures"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 422022",
|
|
||||||
"en": "Senior Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2010,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 450001",
|
|
||||||
"en": "Internet Programming Design"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 414003",
|
|
||||||
"en": "Computer Networks"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ELEC 957001",
|
|
||||||
"en": "Next-Generation Internet Technology"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 408016",
|
|
||||||
"en": "Senior Project I"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2009,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COME 31103",
|
|
||||||
"en": "Probability and Statistics"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COME 33105",
|
|
||||||
"en": "Data Structures"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 42202",
|
|
||||||
"en": "Senior Project II"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2009,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 20704",
|
|
||||||
"en": "Introduction to Computer Science"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 45001",
|
|
||||||
"en": "Internet Programming Design"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 40803",
|
|
||||||
"en": "Senior Project I"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2008,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "COME 31103",
|
|
||||||
"en": "Probability and Statistics"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 76401",
|
|
||||||
"en": "Internet Computing"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "ELEC 75401",
|
|
||||||
"en": "Computer Network: Special"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2008,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 31401",
|
|
||||||
"en": "Internet Programming and Practices"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 74901",
|
|
||||||
"en": "Computer Network Protocols"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2007,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 20703",
|
|
||||||
"en": "Introduction to Computer Science"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COME 31103",
|
|
||||||
"en": "Probability and Statistics"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 41401",
|
|
||||||
"en": "Computer Networks"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2007,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 20109",
|
|
||||||
"en": "C Programming and Practices"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 20704",
|
|
||||||
"en": "Introduction to Computer Science"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 31401",
|
|
||||||
"en": "Internet Programming and Practices"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2006,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 20703",
|
|
||||||
"en": "Introduction to Computer Science"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COME 31103",
|
|
||||||
"en": "Probability and Statistics"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 76401",
|
|
||||||
"en": "Internet Computing"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2006,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 20704",
|
|
||||||
"en": "Introduction to Computer Science"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 31401",
|
|
||||||
"en": "Internet Programming and Practices"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 75101",
|
|
||||||
"en": "Computer Performance Analysis"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2005,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 20703",
|
|
||||||
"en": "Introduction to Computer Science"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 20806",
|
|
||||||
"en": "Data Structures"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 41402",
|
|
||||||
"en": "Computer Network"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2005,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 20704",
|
|
||||||
"en": "Introduction to Computer Science"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 49201",
|
|
||||||
"en": "Internet Programming Design"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 74901",
|
|
||||||
"en": "Computer Network Protocols"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Fall",
|
|
||||||
"year": 2004,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "ELEC 26104",
|
|
||||||
"en": "Computer Engineering"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 22101",
|
|
||||||
"en": "Data Structures II"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "EECS 31201",
|
|
||||||
"en": "Network Programming"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"term": "Spring",
|
|
||||||
"year": 2004,
|
|
||||||
"courses": [
|
|
||||||
{
|
|
||||||
"code": "EECS 20704",
|
|
||||||
"en": "Introduction to Computer Science"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"code": "COMP 21105",
|
|
||||||
"en": "Data Structures I"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -1,544 +0,0 @@
|
|||||||
// AUTO-GENERATED by backend/cmd/export-content — DO NOT EDIT BY HAND
|
|
||||||
import { Member, Alumnus } from "./types";
|
|
||||||
|
|
||||||
export const activeMembers: Member[] = [
|
|
||||||
{
|
|
||||||
"ko": "고석주",
|
|
||||||
"en": "Seok-Joo Koh",
|
|
||||||
"degree": "Professor"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "최동규",
|
|
||||||
"en": "Dong-Kyu Choi",
|
|
||||||
"degree": "PhD"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "남혜빈",
|
|
||||||
"en": "Hye-Been Nam",
|
|
||||||
"degree": "PhDCandidate"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "임도현",
|
|
||||||
"en": "Dohyeon Lim",
|
|
||||||
"degree": "PhDStudent"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "최준혁",
|
|
||||||
"en": "Jun-Hyeok Choi",
|
|
||||||
"degree": "PhDStudent"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "신광선",
|
|
||||||
"en": "Gwang-Seon Shin",
|
|
||||||
"degree": "MSCandidate"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "이환웅",
|
|
||||||
"en": "Hwan-Woong Lee",
|
|
||||||
"degree": "MSStudent"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "Hoang Anh Dang",
|
|
||||||
"en": "Hoang Anh Dang",
|
|
||||||
"degree": "MSStudent"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김민희",
|
|
||||||
"en": "Minhee Kim",
|
|
||||||
"degree": "PhDCandidate",
|
|
||||||
"affiliation": "School of Computer Science and Engineering"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김근솔",
|
|
||||||
"en": "Keun-Sol Kim",
|
|
||||||
"degree": "PhDCandidate",
|
|
||||||
"affiliation": "Department of Information Security"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "민성준",
|
|
||||||
"en": "Sung-Jun Min",
|
|
||||||
"degree": "PhDCandidate",
|
|
||||||
"affiliation": "Department of Information Science"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "최진원",
|
|
||||||
"en": "Jin-Won Choi",
|
|
||||||
"degree": "PhDStudent",
|
|
||||||
"affiliation": "Department of Science and Technology"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "정기수",
|
|
||||||
"en": "Ki-Soo Jung",
|
|
||||||
"degree": "PhDStudent",
|
|
||||||
"affiliation": "Department of Science and Technology"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "이미주",
|
|
||||||
"en": "Mi-Joo Lee",
|
|
||||||
"degree": "PhDStudent",
|
|
||||||
"affiliation": "Department of ICT Convergence"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "박유나",
|
|
||||||
"en": "Yunah Park",
|
|
||||||
"degree": "MSCandidate",
|
|
||||||
"affiliation": "Department of Information Security"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "박채영",
|
|
||||||
"en": "Chae-Young Park",
|
|
||||||
"degree": "MSCandidate",
|
|
||||||
"affiliation": "Department of Information Science"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
export const alumni: Alumnus[] = [
|
|
||||||
{
|
|
||||||
"ko": "김동주",
|
|
||||||
"en": "Dongju Kim",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2026-08",
|
|
||||||
"major": "Computer Science and Engineering",
|
|
||||||
"currentPosition": "He is now with Daegu Catholic University (대구가톨릭대학교) as Professor"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "황정미",
|
|
||||||
"en": "Jung-Mi Hwang",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2026-08",
|
|
||||||
"major": "Information Science",
|
|
||||||
"currentPosition": "She is now with NIA (한국지능정보사회진흥원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "배드로",
|
|
||||||
"en": "Dro Bae",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2026-02",
|
|
||||||
"major": "Industrial Engineering",
|
|
||||||
"currentPosition": "He is now with SK AX"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "권세기",
|
|
||||||
"en": "Se-Gi Kwon",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2026-02",
|
|
||||||
"major": "Information Security",
|
|
||||||
"currentPosition": "He is now with J Solution (제이솔루션) as CEO"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "조세현",
|
|
||||||
"en": "Se-Hyun Cho",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2025-08",
|
|
||||||
"major": "Information Security",
|
|
||||||
"currentPosition": "He is now with Cyber Security Center"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김윤성",
|
|
||||||
"en": "Yun-Seong Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2025-08",
|
|
||||||
"major": "Data Convergence Computing",
|
|
||||||
"currentPosition": "He is now with SL (에스엘)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김수진",
|
|
||||||
"en": "Su-Jin Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2025-08",
|
|
||||||
"major": "Information Science",
|
|
||||||
"currentPosition": "He is now with NIA (한국지능정보사회진흥원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김상태",
|
|
||||||
"en": "Sang-Tae Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2025-08",
|
|
||||||
"major": "Industrial Engineering",
|
|
||||||
"currentPosition": "He is now with Oh-Sung Electronis (오성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김규범",
|
|
||||||
"en": "Gyu-Bum Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2025-08",
|
|
||||||
"major": "Computer Science and Engineering",
|
|
||||||
"currentPosition": "He is now with Korea Real Estate Board (한국부동산원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "정중화",
|
|
||||||
"en": "Joong-Hwa Jung",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2025-02",
|
|
||||||
"currentPosition": "He is now with Lychee AI Coding Academy (리치AI코딩학원) as CEO"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "임도현",
|
|
||||||
"en": "Dohyeon Lim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2025-02",
|
|
||||||
"major": "Computer Science and Engineering",
|
|
||||||
"currentPosition": "He is now with TakenSoft (테이큰소프트)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김소용",
|
|
||||||
"en": "So-Yong Kim",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2024-08",
|
|
||||||
"currentPosition": "He is now with Catholic University of Leuven (UCLouvain) in Belgium"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김민지",
|
|
||||||
"en": "Min-Ji Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2024-02",
|
|
||||||
"currentPosition": "She is now with LG Electronics"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "안은지",
|
|
||||||
"en": "Eun-Ji Ahn",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2024-02",
|
|
||||||
"currentPosition": "S is now with National Security Research Institute (국가보안연구소)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "오동규",
|
|
||||||
"en": "Dong-Kyu Oh",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2024-02",
|
|
||||||
"major": "Industrial Engineering",
|
|
||||||
"currentPosition": "He is now with Human-Plus (휴먼플러스)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김재성",
|
|
||||||
"en": "Jae-Seong Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2023-08",
|
|
||||||
"major": "Information Science",
|
|
||||||
"currentPosition": "He is now with NIA (한국지능정보사회진흥원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "최동규",
|
|
||||||
"en": "Dong-Kyu Choi",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2023-02",
|
|
||||||
"currentPosition": "He is now with ISL in KNU"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "최진원",
|
|
||||||
"en": "Jin-Won Choi",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2023-02",
|
|
||||||
"major": "Information Science",
|
|
||||||
"currentPosition": "He is now with NIA (한국지능정보사회진흥원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김지은",
|
|
||||||
"en": "Ji-Eun Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2023-02",
|
|
||||||
"major": "Information Science",
|
|
||||||
"currentPosition": "She is now with NIA (한국지능정보사회진흥원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김철민",
|
|
||||||
"en": "Cheol-Min Kim",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2022-08",
|
|
||||||
"currentPosition": "He is now with KETI (한국전자기술연구원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김경식",
|
|
||||||
"en": "Kyung-Sik Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2022-02",
|
|
||||||
"currentPosition": "He is now with Hyundai Autoever (현대오토에버)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김근수",
|
|
||||||
"en": "Keun-Soo Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2022-02",
|
|
||||||
"currentPosition": "He is now with Shinhan Bank (신한은행)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "정성우",
|
|
||||||
"en": "Seong-Woo Jeong",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2022-02",
|
|
||||||
"major": "Information Science",
|
|
||||||
"currentPosition": "He is now with NIA (한국지능정보사회진흥원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "최민철",
|
|
||||||
"en": "Min-Cheol Choi",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2022-02",
|
|
||||||
"major": "Information Science",
|
|
||||||
"currentPosition": "He is now with NIA (한국지능정보사회진흥원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "장준희",
|
|
||||||
"en": "Jun-Hee Jang",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2021-08",
|
|
||||||
"major": "Computer Science and Engineering",
|
|
||||||
"currentPosition": "He is now with NIA (한국지능정보사회진흥원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "Muhammad Hafidh Firmansyah",
|
|
||||||
"en": "Muhammad Hafidh Firmansyah",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2021-08",
|
|
||||||
"currentPosition": "He is now with State Polytechnic University of Jember in Indonesia"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "장강민",
|
|
||||||
"en": "Kang-Min Jang",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2021-02",
|
|
||||||
"major": "Information Science",
|
|
||||||
"currentPosition": "He is now with NIA (한국지능정보사회진흥원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "이홍근",
|
|
||||||
"en": "Hong-Keun Lee",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2021-02",
|
|
||||||
"major": "Information Science",
|
|
||||||
"currentPosition": "He is now with NIA (한국지능정보사회진흥원)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "남혜빈",
|
|
||||||
"en": "Hyebeen Nam",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2021-02",
|
|
||||||
"currentPosition": "She is now with ISL in KNU"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "최낙중",
|
|
||||||
"en": "Nak-Jung Choi",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2020-02",
|
|
||||||
"currentPosition": "He is now with Agency for Defense Development (국방과학연구소)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "정민우",
|
|
||||||
"en": "Min-Woo Jung",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2019-02",
|
|
||||||
"currentPosition": "He is now with LG Electronics (LG전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "강형우",
|
|
||||||
"en": "Hyung-Woo Kang",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2018-08",
|
|
||||||
"currentPosition": "He is now with Samsung Electronics (삼성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "최예찬",
|
|
||||||
"en": "Ye-Chan Choi",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2018-02",
|
|
||||||
"currentPosition": "He is now with LG-CNS"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "최상일",
|
|
||||||
"en": "Sang-Il Choi",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2017-02",
|
|
||||||
"currentPosition": "He is now with Daegu Catholic University (대구가톨릭대학교) as a professor"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "박진호",
|
|
||||||
"en": "Jin-Ho Park",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2016-08",
|
|
||||||
"currentPosition": "He is now with BiThumb (빗썸코리아)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "석성윤",
|
|
||||||
"en": "Sung-Yoon Seok",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2016-08",
|
|
||||||
"major": "Samsung Electronics Program",
|
|
||||||
"currentPosition": "He is now with Samsung Electronics (삼성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김진규",
|
|
||||||
"en": "Jin-Kyu Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2016-08",
|
|
||||||
"major": "Samsung Electronics Program",
|
|
||||||
"currentPosition": "He is now with Samsung Electronics (삼성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김재철",
|
|
||||||
"en": "Jae-Cheol Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2016-08",
|
|
||||||
"major": "Samsung Electronics Program",
|
|
||||||
"currentPosition": "He is now with Samsung Electronics (삼성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김지인",
|
|
||||||
"en": "Ji-In Kim",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2016-02",
|
|
||||||
"currentPosition": "He is now with FAM Tech. (팸텍) as CEO"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김우주",
|
|
||||||
"en": "Woo-Ju Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2016-02",
|
|
||||||
"currentPosition": "He is now with ZCube (지큐브)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "박정섭",
|
|
||||||
"en": "Jung-Sub Park",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2015-08",
|
|
||||||
"major": "Samsung Electronics Program",
|
|
||||||
"currentPosition": "He is now with Samsung Electronics (삼성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "최종명",
|
|
||||||
"en": "Jong-Myoung Choi",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2015-02",
|
|
||||||
"currentPosition": "He is now with NP Communications"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "이종관",
|
|
||||||
"en": "Jong-Kwan Lee",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2014-02",
|
|
||||||
"major": "Samsung Electronics Program",
|
|
||||||
"currentPosition": "He is now with Hanwha Ocean (한화오션)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "이상헌",
|
|
||||||
"en": "Sang-Hun Lee",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2014-02",
|
|
||||||
"currentPosition": "He is now with Inno Wireless"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "민경욱",
|
|
||||||
"en": "Kyeong-Wook Min",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2013-02",
|
|
||||||
"major": "Samsung Electronics Program",
|
|
||||||
"currentPosition": "He is now with Samsung Electronics (삼성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김상헌",
|
|
||||||
"en": "Sang-Heon Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2013-02",
|
|
||||||
"major": "Samsung Electronics Program",
|
|
||||||
"currentPosition": "He is now with Samsung Electronics (삼성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "Moneeb Gohar",
|
|
||||||
"en": "Moneeb Gohar",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2012-08",
|
|
||||||
"currentPosition": "He is now with Department of Computer Science, Bahria University (at Islamabad) in Pakistan"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "박재완",
|
|
||||||
"en": "Jae-Wan Park",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2012-02",
|
|
||||||
"currentPosition": "He is now with Ministry of Justice (Immigration Information Center, 법무부)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "이재경",
|
|
||||||
"en": "Jae-Kyoung Lee",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2012-02",
|
|
||||||
"currentPosition": "She is now with Korea Transportation Satefy Authority (한국교통안전공단)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "하원기",
|
|
||||||
"en": "Won-Ki Ha",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2012-02",
|
|
||||||
"major": "Samsung Electronics Program",
|
|
||||||
"currentPosition": "He is now with Samsung Electronics (삼성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김근희",
|
|
||||||
"en": "Keun-Hee Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2012-02",
|
|
||||||
"major": "Samsung Electronics Program",
|
|
||||||
"currentPosition": "She is now with Samsung Electronics (삼성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "권순홍",
|
|
||||||
"en": "Soon-Hong Kwon",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2010-02",
|
|
||||||
"currentPosition": "He is now with Samsung Electronics (삼성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김동필",
|
|
||||||
"en": "Dong-Phil Kim",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2009-02",
|
|
||||||
"currentPosition": "He is now with National Security Research Institute (국가보안연구소)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "최린",
|
|
||||||
"en": "Lin Cui",
|
|
||||||
"degree": "PhD",
|
|
||||||
"graduatedAt": "2009-02",
|
|
||||||
"currentPosition": "He is now with Tianjin University of Technology and Education in China"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "이동화",
|
|
||||||
"en": "Dong-Hwa Lee",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2009-02",
|
|
||||||
"currentPosition": "He is now with Samsung Electronics (삼성전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "박재성",
|
|
||||||
"en": "Jae-Sung Park",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2008-08",
|
|
||||||
"currentPosition": "He is now with Gom&Company (곰앤컴퍼니)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "주수경",
|
|
||||||
"en": "Su-Kyoung Ju",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2008-02",
|
|
||||||
"currentPosition": "She is now with Youngjin Univ. (영진전문대학교)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "윤성식",
|
|
||||||
"en": "Sung-Shik Yoon",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2007-08",
|
|
||||||
"currentPosition": "He is now with Jo-Il Textile Processing Company (조일가공) as CEO"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "김상태",
|
|
||||||
"en": "Sang-Tae Kim",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2007-02",
|
|
||||||
"currentPosition": "He is now with LG Electronics (LG전자)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ko": "하종식",
|
|
||||||
"en": "Jong-Shik Ha",
|
|
||||||
"degree": "MS",
|
|
||||||
"graduatedAt": "2007-02",
|
|
||||||
"currentPosition": "He is now with Samsung Electronics (삼성전자)"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
// AUTO-GENERATED by backend/cmd/export-content — DO NOT EDIT BY HAND
|
|
||||||
import { ResearchProject } from "./types";
|
|
||||||
|
|
||||||
export const researchProjects: ResearchProject[] = [
|
|
||||||
{
|
|
||||||
"slug": "iot-standards",
|
|
||||||
"title": "AIoT & AI-RAN",
|
|
||||||
"abstract": "AIoT & AI-RAN investigates agent-based IoT architectures in which autonomous AI agents are distributed across sensor, edge, and radio access layers. The project studies agent-to-agent coordination over high-performance transport (gRPC/QUIC) bridged with constrained edge protocols (MQTT/CoAP), targeting AI-RAN designs for distributed autonomous control.",
|
|
||||||
"keywords": [
|
|
||||||
"AIoT",
|
|
||||||
"agent-based IoT",
|
|
||||||
"AI-RAN",
|
|
||||||
"constrained edge protocols",
|
|
||||||
"distributed autonomous control"
|
|
||||||
],
|
|
||||||
"standardsTrack": "National Research Foundation of Korea (NRF)",
|
|
||||||
"standardsOrg": "NRF",
|
|
||||||
"period": "2026 ~ Present",
|
|
||||||
"deliverables": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"slug": "ccis",
|
|
||||||
"title": "MCM",
|
|
||||||
"abstract": "Multilateral and Collaborative Metaverse (MCM) refers to metaverse systems in which two or more participants simultaneously interact within a shared virtual space for a common collaborative purpose. Unlike single-user or purely competitive environments, an MCM service is defined by coordinated participation: its intended outcome cannot be achieved by a single user acting alone. The project defines general requirements, service classification, and a gap analysis against existing standards.",
|
|
||||||
"keywords": [
|
|
||||||
"MCM",
|
|
||||||
"metaverse",
|
|
||||||
"shared virtual space",
|
|
||||||
"coordinated participation",
|
|
||||||
"service classification"
|
|
||||||
],
|
|
||||||
"standardsTrack": "IEC/TC 100/WG 12 supported by KEIT",
|
|
||||||
"standardsOrg": "IEC TC100",
|
|
||||||
"period": "2026 ~ Present",
|
|
||||||
"deliverables": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"slug": "vlc-iot",
|
|
||||||
"title": "MVQM",
|
|
||||||
"abstract": "Management of Visual Quality in Metaverse Systems (MVQM) is a conceptual and functional approach for managing visual quality by dynamically adapting visual data delivery in response to user context, device capability, and network conditions. It emphasizes user-centric, context-aware quality management over static system-centric optimization, covering hybrid visual assets, level of detail, and area of interest adaptation.",
|
|
||||||
"keywords": [
|
|
||||||
"MVQM",
|
|
||||||
"visual quality",
|
|
||||||
"hybrid visual assets",
|
|
||||||
"level of detail",
|
|
||||||
"area of interest"
|
|
||||||
],
|
|
||||||
"standardsTrack": "IEC/TC 100/WG 12 supported by KEIT",
|
|
||||||
"standardsOrg": "IEC TC100",
|
|
||||||
"period": "2026 ~ Present",
|
|
||||||
"deliverables": []
|
|
||||||
}
|
|
||||||
];
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,387 +0,0 @@
|
|||||||
// AUTO-GENERATED by backend/cmd/export-content — DO NOT EDIT BY HAND
|
|
||||||
import { StandardsBody } from "./types";
|
|
||||||
|
|
||||||
export const standardsBodies: StandardsBody[] = [
|
|
||||||
{
|
|
||||||
"org": "IEC TC100",
|
|
||||||
"full": "Multimedia Systems and Equipment",
|
|
||||||
"scope": "international",
|
|
||||||
"period": "2018 ~ Present",
|
|
||||||
"role": "Convenor",
|
|
||||||
"projects": [
|
|
||||||
{
|
|
||||||
"wg": "WG12",
|
|
||||||
"name": "Multimedia Systems and Equipment for Metaverse (IEC 63614)",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "Multimedia Systems and Equipment for Metaverse - Part 1: Genaral",
|
|
||||||
"ref": "IEC TR 63614-1 (May 2026)",
|
|
||||||
"status": "TR",
|
|
||||||
"publishedAt": "2026-05"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Multimedia Systems and Equipment for Metaverse - Part 2: Classification",
|
|
||||||
"ref": "IEC TS 63614-2 (May 2026)",
|
|
||||||
"status": "TS",
|
|
||||||
"publishedAt": "2026-05"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Multimedia Systems and Equipment for Metaverse - Part 3: Gap Analysis",
|
|
||||||
"ref": "IEC TR 63614-3 (March 2026)",
|
|
||||||
"status": "TR",
|
|
||||||
"publishedAt": "2026-03"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Multimedia Systems and Equipment for Metaverse - Part 4: AI Use Cases",
|
|
||||||
"ref": "IEC WDTR 63614-4 (In Progress)",
|
|
||||||
"status": "InProgress"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wg": "WG11(Convenor)",
|
|
||||||
"name": "User's QoE for Multimedia Conference Services (IEC 63478)",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "User's QoE for Multimedia Conference Services - Part 1: General",
|
|
||||||
"ref": "IEC TR 63478-1 (November 2023)",
|
|
||||||
"status": "TR",
|
|
||||||
"publishedAt": "2023-11"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "User's QoE for Multimedia Conference Services - Part 2: Requirments",
|
|
||||||
"ref": "IEC IS 63478-2 (October 2025)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2025-10"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "User's QoE for Multimedia Conference Services - Part 3: Measurement Methods",
|
|
||||||
"ref": "IEC CDV 63478-3 (In Progress)",
|
|
||||||
"status": "InProgress"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wg": "WG30(TA17)",
|
|
||||||
"name": "Infotainment Services for Public Vehicles (IEC 63479)",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "Infotainment Services for Public Vehicles (PVIS) - Part 1: General",
|
|
||||||
"ref": "IEC TR 63479-1 (November 2023)",
|
|
||||||
"status": "TR",
|
|
||||||
"publishedAt": "2023-11"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Infotainment Services for Public Vehicles (PVIS) - Part 2: Requirements",
|
|
||||||
"ref": "IEC IS 63479-2 (February 2026)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2026-02"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Infotainment Services for Public Vehicles (PVIS) - Part 3: Framework",
|
|
||||||
"ref": "IEC IS 63479-3 (January 2026)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2026-01"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wg": "WG30(TA17)",
|
|
||||||
"name": "Configurable Car Infotainment Services (IEC 63246)",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "Configurable Car Infotainment Services (CCIS) - Part 1: General",
|
|
||||||
"ref": "IEC 63246-1 (August 2021)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2021-08"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Configurable Car Infotainment Services (CCIS) - Part 2: Requirements",
|
|
||||||
"ref": "IEC 63246-2 (January 2022)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2022-01"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Configurable Car Infotainment Services (CCIS) - Part 3: Framework",
|
|
||||||
"ref": "IEC 63246-3 (January 2022)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2022-01"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Configurable Car Infotainment Services (CCIS) - Part 4: Protocol",
|
|
||||||
"ref": "IEC TR 63246-4 (December 2022)",
|
|
||||||
"status": "TR",
|
|
||||||
"publishedAt": "2022-12"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"org": "ISO/IEC JTC1/SC41",
|
|
||||||
"full": "Internet of Things and Digital Twin",
|
|
||||||
"scope": "international",
|
|
||||||
"period": "2020 ~ Present",
|
|
||||||
"projects": [
|
|
||||||
{
|
|
||||||
"wg": "WG",
|
|
||||||
"name": "(WG5) IoT-based Management of Tangible Cultural Heritage Assets (ISO/IEC TR 30189)",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "Part 1: Framework",
|
|
||||||
"ref": "ISO/IEC TR 30189-1 (March 2025)",
|
|
||||||
"status": "TR",
|
|
||||||
"publishedAt": "2025-03"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Part 2: Use Cases",
|
|
||||||
"ref": "ISO/IEC CDTR 30189-2 (In Progress)",
|
|
||||||
"status": "InProgress"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"org": "ITU-T SG20",
|
|
||||||
"full": "IoT Services based on VLC",
|
|
||||||
"scope": "international",
|
|
||||||
"period": "2018 ~ 2020",
|
|
||||||
"projects": [
|
|
||||||
{
|
|
||||||
"wg": "Main",
|
|
||||||
"name": "IoT Services based on VLC",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "Framework of IoT Services based on Visible Light Communications (VLC)",
|
|
||||||
"ref": "ITU-T Recommendation Y.4465 (January 2020)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2020-01"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Functional Architecture for IoT Services based on VLC",
|
|
||||||
"ref": "ITU-T Recommendation Y.4474 (August 2020)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2020-08"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"org": "TTA/PG425",
|
|
||||||
"full": "가시광 통신 기반 사물인터넷 서비스",
|
|
||||||
"scope": "domestic",
|
|
||||||
"period": "2018 ~ 2020",
|
|
||||||
"projects": [
|
|
||||||
{
|
|
||||||
"wg": "Main",
|
|
||||||
"name": "가시광 통신 기반 사물인터넷 서비스",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "가시광 통신 기반 사물인터넷 서비스 - 제 1 부: 네트워크 모델 및 요구사항",
|
|
||||||
"ref": "TTAK.KO-10.1158-part1 (2019년 12월)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2019-12"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "가시광 통신 기반 사물인터넷 서비스 - 제 2 부: 프레임워크",
|
|
||||||
"ref": "TTAK.KO-10.1158-part2 (2020년 12월)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2020-12"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "가시광 통신 기반 사물인터넷 서비스 - 제 3 부: 프로토콜",
|
|
||||||
"ref": "TTAK.KO-10.1158-part3 (2020년 12월)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2020-12"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"org": "ITU-T SG13",
|
|
||||||
"full": "Mobility Management",
|
|
||||||
"scope": "international",
|
|
||||||
"period": "2002 ~ 2012",
|
|
||||||
"projects": [
|
|
||||||
{
|
|
||||||
"wg": "Main",
|
|
||||||
"name": "Mobility Management",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "NNI Mobility Management Requirements for SBI2K",
|
|
||||||
"ref": "ITU-T Supplement to Recommendation Q.Sup52 (December 2004)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2004-12"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Mobility Management Requirements for Next-Generation Networks",
|
|
||||||
"ref": "ITU-T Recommendation Q.1706/Y.2801 (July 2006)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2006-07"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Framework of IPv6 Multi-homing for NGN",
|
|
||||||
"ref": "ITU-T Recommendation Y.2052 (Feb. 2008)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2008-02"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Generic Framework of Mobility Management for Next-Generation Networks",
|
|
||||||
"ref": "ITU-T Recommendation Q.1707/Y.2804 (Feb. 2008)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2008-02"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Framework of Location Management for Next-Generation Networks",
|
|
||||||
"ref": "ITU-T Recommendation Q.1708/Y.2805 (October 2008)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2008-10"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Framework of Handover Control for Next-Generation Networks",
|
|
||||||
"ref": "ITU-T Recommendation Q.1709/Y.2806 (October 2008)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2008-10"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Framework of Mobility Management in Service Stratum for NGN",
|
|
||||||
"ref": "ITU-T Recommendation Y.2809 (November 2011)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2011-11"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"org": "ISO/IEC JTC1/SC6",
|
|
||||||
"full": "WG7: Network and Transport",
|
|
||||||
"scope": "international",
|
|
||||||
"period": "2000 ~ 2014",
|
|
||||||
"projects": [
|
|
||||||
{
|
|
||||||
"wg": "Enhanced Communication Transport Protocol (ECTP)",
|
|
||||||
"name": "ISO/IEC 14476",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "ECTP-1: Specification of Simplex Multicast Transport",
|
|
||||||
"ref": "ITU-T Recommendation X.606 (October 2001) ISO/IEC IS 14476-1 (April 2002)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2001-10"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "ECTP-2: Specification of QoS Management for Simplex Multicast Transport",
|
|
||||||
"ref": "ITU-T Recommendation X.606.1 (February 2003) ISO/IEC IS 14476-2 (June 2003)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2003-02"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "ECTP-3: Specification of Duplex Multicast Transport",
|
|
||||||
"ref": "ITU-T Recommendation X.607 (February 2007) ISO/IEC IS 14476-3 (August 2008)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2007-02"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "ECTP-4: Specification of QoS Management for Duplex Multicast Transport",
|
|
||||||
"ref": "ITU-T Recommendation X.607.1 (November 2008) ISO/IEC IS 14476-4 (April 2010)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2008-11"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "ECTP-5: Specification of N-plex Multicast Transport",
|
|
||||||
"ref": "ITU-T Recommendation X.608 (February 2007) ISO/IEC IS 14476-5 (August 2008)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2007-02"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "ECTP-6: Specification of QoS Management for N-plex Multicast Transport",
|
|
||||||
"ref": "ITU-T Recommendation X.608.1 (November 2008) ISO/IEC IS 14476-6 (April 2010)",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2008-11"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wg": "Relayed Multicast Protocol (RMCP)",
|
|
||||||
"name": "ISO/IEC 16512",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "RMCP-1: Framework",
|
|
||||||
"ref": "ITU-T Recommendation X.603 (April 2004) ISO/IEC IS 16512-1",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2004-04"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "RMCP-2: Specification of Simplex Group Applications",
|
|
||||||
"ref": "ITU-T Recommendation X.603.1 (February 2007) ISO/IEC IS 16512-2",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2007-02"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "RMCP-3: Specification of N-plex Group Applications",
|
|
||||||
"ref": "ITU-T Recommendation X.603.2 (September 2010) ISO/IEC IS 16512-3",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2010-09"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wg": "Mobile Multicast Communications (MMC)",
|
|
||||||
"name": "ISO/IEC 24793",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "MMC-1: MMC Framework",
|
|
||||||
"ref": "ITU-T Recommendation X.604 (March 2010) ISO/IEC IS 24793-1",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2010-03"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "MMC-2: MMC Protocol over Native IP Multicast Networks",
|
|
||||||
"ref": "ITU-T Recommendation X.604.1 (March 2010) ISO/IEC IS 24793-2",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2010-03"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "MMC-3: MMC Protocol over Overlay Multicast Networks",
|
|
||||||
"ref": "ITU-T Recommendation X.604.2 (September 2010) ISO/IEC IS 24793-3",
|
|
||||||
"status": "IS",
|
|
||||||
"publishedAt": "2010-09"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wg": "Future Network",
|
|
||||||
"name": "Problem Statement and Requirements (FN-PSR): ISO/IEC TR 29181",
|
|
||||||
"documents": [
|
|
||||||
{
|
|
||||||
"title": "Part 1: Overall Aspects",
|
|
||||||
"ref": "ISO/IEC TR 29181-1 (September 2012)",
|
|
||||||
"status": "TR",
|
|
||||||
"publishedAt": "2012-09"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Part 2: Naming and Addressing",
|
|
||||||
"ref": "ISO/IEC TR 29181-2 (December 2014)",
|
|
||||||
"status": "TR",
|
|
||||||
"publishedAt": "2014-12"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Part 3: Switching and Routing",
|
|
||||||
"ref": "ISO/IEC TR 29181-3 (April 2013)",
|
|
||||||
"status": "TR",
|
|
||||||
"publishedAt": "2013-04"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Part 4: Mobility",
|
|
||||||
"ref": "ISO/IEC TR 29181-4 (December 2013)",
|
|
||||||
"status": "TR",
|
|
||||||
"publishedAt": "2013-12"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -1,11 +1,31 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Data Verification Gate (AC-07 / AC-08 / AC-10 / AC-11 / AC-30 / Live Database & API Pipeline Integrity)
|
||||||
|
Verifies:
|
||||||
|
1. Full data extraction from legacy HTML sources (16 members, 60 alumni, 68 intl, 80 dom, 75 pat, 45 sem, 6 bodies, 44 docs, 3 projects).
|
||||||
|
2. SQLite Backend Database (backend/anl.db) tables & row counts matching baseline.
|
||||||
|
3. Live Go REST API endpoints (http://localhost:8080/api/v1) data losslessness & schema consistency if server is active.
|
||||||
|
4. ISO 8601 strict date formatting across all entities.
|
||||||
|
5. Publication volume cross-check and keyword substring assertions.
|
||||||
|
"""
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import sqlite3
|
||||||
|
import json
|
||||||
|
import urllib.request
|
||||||
|
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
sys.path.insert(0, os.path.join(BASE_DIR, "refer_landing_page", "scripts", "extract"))
|
sys.path.insert(0, os.path.join(BASE_DIR, "refer_landing_page", "scripts", "extract"))
|
||||||
|
|
||||||
|
ROOT_PROJECT_DIR = os.path.dirname(BASE_DIR)
|
||||||
|
DB_PATH = os.path.join(ROOT_PROJECT_DIR, "backend", "anl.db")
|
||||||
|
if not os.path.exists(DB_PATH):
|
||||||
|
DB_PATH = os.path.join(BASE_DIR, "backend", "anl.db")
|
||||||
|
|
||||||
|
API_BASE_URL = os.environ.get("API_BASE_URL", "http://localhost:8080/api/v1")
|
||||||
|
|
||||||
MONTH_MAP = {
|
MONTH_MAP = {
|
||||||
"january": "01", "jan": "01", "february": "02", "feb": "02", "march": "03", "mar": "03",
|
"january": "01", "jan": "01", "february": "02", "feb": "02", "march": "03", "mar": "03",
|
||||||
"april": "04", "apr": "04", "may": "05", "june": "06", "jun": "06", "july": "07", "jul": "07",
|
"april": "04", "apr": "04", "may": "05", "june": "06", "jun": "06", "july": "07", "jul": "07",
|
||||||
@@ -25,42 +45,22 @@ def verify():
|
|||||||
total_pubs = len(intl_p) + len(dom_p) + len(pat_p)
|
total_pubs = len(intl_p) + len(dom_p) + len(pat_p)
|
||||||
std_docs_count = sum(len(p["documents"]) for b in bodies for p in b["projects"])
|
std_docs_count = sum(len(p["documents"]) for b in bodies for p in b["projects"])
|
||||||
|
|
||||||
print("=== DATA VERIFICATION GATE (AC-07 / AC-08 / AC-10 / AC-11 / AC-30 / VOLUME CROSS-CHECK) ===")
|
print("=== DATA VERIFICATION GATE (AC-07 / AC-08 / AC-10 / AC-11 / AC-30 / LIVE PIPELINE INTEGRITY) ===")
|
||||||
print(f"Active Members: {len(active_m)} (Expected: 16)")
|
print(f"[HTML Source Extraction Baseline]")
|
||||||
print(f"Alumni: {len(alumni_m)} (Expected: 60)")
|
print(f" Active Members: {len(active_m)} (Expected: 16)")
|
||||||
print(f"International Papers: {len(intl_p)} (Expected: 68)")
|
print(f" Alumni: {len(alumni_m)} (Expected: 60)")
|
||||||
print(f"Domestic Papers: {len(dom_p)} (Expected: 80)")
|
print(f" International Papers: {len(intl_p)} (Expected: 68)")
|
||||||
print(f"Patents: {len(pat_p)} (Expected: 75)")
|
print(f" Domestic Papers: {len(dom_p)} (Expected: 80)")
|
||||||
print(f"Total Publications: {total_pubs} (Expected: 223)")
|
print(f" Patents: {len(pat_p)} (Expected: 75)")
|
||||||
print(f"Lectures Semesters: {len(semesters)} (Expected: 45)")
|
print(f" Total Publications: {total_pubs} (Expected: 223)")
|
||||||
print(f"Standard Bodies: {len(bodies)} (Expected: 6)")
|
print(f" Lectures Semesters: {len(semesters)} (Expected: 45)")
|
||||||
print(f"Standard Documents: {std_docs_count} (Expected: 44)")
|
print(f" Standard Bodies: {len(bodies)} (Expected: 6)")
|
||||||
print(f"Research Projects: {len(projects)} (Expected: 3)")
|
print(f" Standard Documents: {std_docs_count} (Expected: 44)")
|
||||||
|
print(f" Research Projects: {len(projects)} (Expected: 3)")
|
||||||
|
|
||||||
errors = []
|
errors = []
|
||||||
|
|
||||||
if len(projects) != 3:
|
# 1. Source Extraction Integrity Checks
|
||||||
errors.append(f"Research Projects count mismatch: got {len(projects)}, expected 3")
|
|
||||||
|
|
||||||
# AC-30: Keyword Substring Verification & AC-32 Deliverable WG Attribution
|
|
||||||
for proj in projects:
|
|
||||||
abstract = proj.get("abstract", "")
|
|
||||||
for kw in proj.get("keywords", []):
|
|
||||||
if kw not in abstract:
|
|
||||||
errors.append(f"AC-30 Keyword Violation in project '{proj.get('slug')}': keyword '{kw}' not in abstract")
|
|
||||||
|
|
||||||
if proj["slug"] == "ccis":
|
|
||||||
for d in proj.get("deliverables", []):
|
|
||||||
if "63246" not in d["ref"]:
|
|
||||||
errors.append(f"AC-32 Violation: CCIS project deliverable '{d['ref']}' does not belong to CCIS WG (IEC 63246)")
|
|
||||||
|
|
||||||
# N1: Title artifact check (No trailing quotes or commas in publication titles)
|
|
||||||
for p in intl_p + dom_p + pat_p:
|
|
||||||
t = p.get("title", "")
|
|
||||||
if re.search(r'["“”]|,$', t):
|
|
||||||
errors.append(f"N1 Title Artifact Violation in publication '{p.get('id')}': title '{t}' contains quotes or trailing comma")
|
|
||||||
|
|
||||||
# 1. Count checks
|
|
||||||
if len(active_m) != 16:
|
if len(active_m) != 16:
|
||||||
errors.append(f"Active Members count mismatch: got {len(active_m)}, expected 16")
|
errors.append(f"Active Members count mismatch: got {len(active_m)}, expected 16")
|
||||||
if len(alumni_m) != 60:
|
if len(alumni_m) != 60:
|
||||||
@@ -79,28 +79,175 @@ def verify():
|
|||||||
errors.append(f"Standard Bodies count mismatch: got {len(bodies)}, expected 6")
|
errors.append(f"Standard Bodies count mismatch: got {len(bodies)}, expected 6")
|
||||||
if std_docs_count != 44:
|
if std_docs_count != 44:
|
||||||
errors.append(f"Standard Documents count mismatch: got {std_docs_count}, expected 44")
|
errors.append(f"Standard Documents count mismatch: got {std_docs_count}, expected 44")
|
||||||
|
if len(projects) != 3:
|
||||||
|
errors.append(f"Research Projects count mismatch: got {len(projects)}, expected 3")
|
||||||
|
|
||||||
# 2. File checks (BOM, Strict ISO 8601, and Semantic Date Ranges)
|
# 2. SQLite Backend Database Verification
|
||||||
|
if os.path.exists(DB_PATH):
|
||||||
|
print(f"\n[SQLite Database Verification ({DB_PATH})]")
|
||||||
|
try:
|
||||||
|
conn = sqlite3.connect(DB_PATH)
|
||||||
|
cur = conn.cursor()
|
||||||
|
|
||||||
|
def get_count(table, where=""):
|
||||||
|
query = f"SELECT count(*) FROM {table} {where}"
|
||||||
|
cur.execute(query)
|
||||||
|
return cur.fetchone()[0]
|
||||||
|
|
||||||
|
db_counts = {
|
||||||
|
"members": get_count("members"),
|
||||||
|
"alumni": get_count("alumni"),
|
||||||
|
"intl_pubs": get_count("publications", "WHERE category='intl-journal-conf'"),
|
||||||
|
"dom_pubs": get_count("publications", "WHERE category='domestic-journal-conf'"),
|
||||||
|
"patents": get_count("patents"),
|
||||||
|
"semesters": get_count("semesters"),
|
||||||
|
"standards_bodies": get_count("standards_bodies"),
|
||||||
|
"standard_documents": get_count("standard_documents"),
|
||||||
|
"research_projects": get_count("research_projects"),
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v in db_counts.items():
|
||||||
|
print(f" DB {k}: {v}")
|
||||||
|
|
||||||
|
if db_counts["members"] != 16:
|
||||||
|
errors.append(f"SQLite members count: {db_counts['members']}, expected 16")
|
||||||
|
if db_counts["alumni"] != 60:
|
||||||
|
errors.append(f"SQLite alumni count: {db_counts['alumni']}, expected 60")
|
||||||
|
if db_counts["intl_pubs"] != 68:
|
||||||
|
errors.append(f"SQLite intl publications count: {db_counts['intl_pubs']}, expected 68")
|
||||||
|
if db_counts["dom_pubs"] != 80:
|
||||||
|
errors.append(f"SQLite dom publications count: {db_counts['dom_pubs']}, expected 80")
|
||||||
|
if db_counts["patents"] != 75:
|
||||||
|
errors.append(f"SQLite patents count: {db_counts['patents']}, expected 75")
|
||||||
|
if db_counts["semesters"] != 45:
|
||||||
|
errors.append(f"SQLite semesters count: {db_counts['semesters']}, expected 45")
|
||||||
|
if db_counts["standards_bodies"] != 6:
|
||||||
|
errors.append(f"SQLite standards bodies count: {db_counts['standards_bodies']}, expected 6")
|
||||||
|
if db_counts["standard_documents"] != 44:
|
||||||
|
errors.append(f"SQLite standard documents count: {db_counts['standard_documents']}, expected 44")
|
||||||
|
if db_counts["research_projects"] != 3:
|
||||||
|
errors.append(f"SQLite research projects count: {db_counts['research_projects']}, expected 3")
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
print(" ✅ SQLite Database records match expected baseline exactly")
|
||||||
|
except Exception as e:
|
||||||
|
errors.append(f"SQLite DB verification failed: {e}")
|
||||||
|
else:
|
||||||
|
print(f"\n⚠️ SQLite database not found at {DB_PATH}, skipping direct DB query")
|
||||||
|
|
||||||
|
# 3. Live Go REST API Endpoint Verification (if backend is active)
|
||||||
|
is_api_live = False
|
||||||
|
try:
|
||||||
|
req = urllib.request.Request(f"{API_BASE_URL}/health", headers={"User-Agent": "DataVerifier"})
|
||||||
|
with urllib.request.urlopen(req, timeout=1) as resp:
|
||||||
|
if resp.status == 200:
|
||||||
|
is_api_live = True
|
||||||
|
except Exception:
|
||||||
|
is_api_live = False
|
||||||
|
|
||||||
|
if is_api_live:
|
||||||
|
print(f"\n[Live Go REST API Verification ({API_BASE_URL})]")
|
||||||
|
try:
|
||||||
|
def fetch_json(endpoint):
|
||||||
|
req = urllib.request.Request(f"{API_BASE_URL}{endpoint}", headers={"User-Agent": "DataVerifier"})
|
||||||
|
with urllib.request.urlopen(req, timeout=3) as resp:
|
||||||
|
data = json.loads(resp.read().decode("utf-8"))
|
||||||
|
return data.get("data", [])
|
||||||
|
|
||||||
|
stats = fetch_json("/stats/summary")
|
||||||
|
api_members = fetch_json("/members")
|
||||||
|
api_alumni = fetch_json("/alumni")
|
||||||
|
api_intl = fetch_json("/publications?category=intl-journal-conf")
|
||||||
|
api_dom = fetch_json("/publications?category=domestic-journal-conf")
|
||||||
|
api_patents = fetch_json("/patents")
|
||||||
|
api_semesters = fetch_json("/semesters")
|
||||||
|
api_standards = fetch_json("/standards-bodies")
|
||||||
|
api_projects = fetch_json("/research-projects")
|
||||||
|
|
||||||
|
api_std_docs_count = sum(len(p.get("documents", [])) for b in api_standards for p in b.get("projects", []))
|
||||||
|
|
||||||
|
print(f" API stats summary: {stats}")
|
||||||
|
print(f" API members count: {len(api_members)}")
|
||||||
|
print(f" API alumni count: {len(api_alumni)}")
|
||||||
|
print(f" API publications (intl): {len(api_intl)}, (dom): {len(api_dom)}")
|
||||||
|
print(f" API patents count: {len(api_patents)}")
|
||||||
|
print(f" API semesters count: {len(api_semesters)}")
|
||||||
|
print(f" API standards bodies: {len(api_standards)} (docs: {api_std_docs_count})")
|
||||||
|
print(f" API projects count: {len(api_projects)}")
|
||||||
|
|
||||||
|
if stats.get("intl_publications") != 68:
|
||||||
|
errors.append(f"API stats intl_publications mismatch: {stats.get('intl_publications')}, expected 68")
|
||||||
|
if stats.get("standardization_docs") != 44:
|
||||||
|
errors.append(f"API stats standardization_docs mismatch: {stats.get('standardization_docs')}, expected 44")
|
||||||
|
if stats.get("patents") != 75:
|
||||||
|
errors.append(f"API stats patents mismatch: {stats.get('patents')}, expected 75")
|
||||||
|
if len(api_members) != 16:
|
||||||
|
errors.append(f"API members count: {len(api_members)}, expected 16")
|
||||||
|
if len(api_alumni) != 60:
|
||||||
|
errors.append(f"API alumni count: {len(api_alumni)}, expected 60")
|
||||||
|
if len(api_intl) != 68:
|
||||||
|
errors.append(f"API intl publications count: {len(api_intl)}, expected 68")
|
||||||
|
if len(api_dom) != 80:
|
||||||
|
errors.append(f"API dom publications count: {len(api_dom)}, expected 80")
|
||||||
|
if len(api_patents) != 75:
|
||||||
|
errors.append(f"API patents count: {len(api_patents)}, expected 75")
|
||||||
|
if len(api_semesters) != 45:
|
||||||
|
errors.append(f"API semesters count: {len(api_semesters)}, expected 45")
|
||||||
|
if len(api_standards) != 6:
|
||||||
|
errors.append(f"API standards bodies count: {len(api_standards)}, expected 6")
|
||||||
|
if api_std_docs_count != 44:
|
||||||
|
errors.append(f"API standard documents count: {api_std_docs_count}, expected 44")
|
||||||
|
if len(api_projects) != 3:
|
||||||
|
errors.append(f"API research projects count: {len(api_projects)}, expected 3")
|
||||||
|
|
||||||
|
print(" ✅ Live REST API endpoints serve 100% losslessly verified data")
|
||||||
|
except Exception as e:
|
||||||
|
errors.append(f"Live API verification error: {e}")
|
||||||
|
else:
|
||||||
|
print(f"\nℹ️ Live Go API server not responding at {API_BASE_URL} (tested offline DB mode)")
|
||||||
|
|
||||||
|
# 4. AC-30 Keyword Substring Verification & AC-32 Deliverable WG Attribution
|
||||||
|
for proj in projects:
|
||||||
|
abstract = proj.get("abstract", "")
|
||||||
|
for kw in proj.get("keywords", []):
|
||||||
|
if kw not in abstract:
|
||||||
|
errors.append(f"AC-30 Keyword Violation in project '{proj.get('slug')}': keyword '{kw}' not in abstract")
|
||||||
|
|
||||||
|
if proj["slug"] == "ccis":
|
||||||
|
for d in proj.get("deliverables", []):
|
||||||
|
if "63246" not in d["ref"]:
|
||||||
|
errors.append(f"AC-32 Violation: CCIS project deliverable '{d['ref']}' does not belong to CCIS WG (IEC 63246)")
|
||||||
|
|
||||||
|
# 5. Title artifact check (No trailing quotes or commas in publication titles)
|
||||||
|
for p in intl_p + dom_p + pat_p:
|
||||||
|
t = p.get("title", "")
|
||||||
|
if re.search(r'["“”]|,$', t):
|
||||||
|
errors.append(f"N1 Title Artifact Violation in publication '{p.get('id')}': title '{t}' contains quotes or trailing comma")
|
||||||
|
|
||||||
|
# 6. Strict ISO 8601 Date and BOM Verification
|
||||||
content_dir = os.path.join(BASE_DIR, "content")
|
content_dir = os.path.join(BASE_DIR, "content")
|
||||||
date_regex = re.compile(r'^(19|20)\d{2}(-(0[1-9]|1[0-2]))?(-(0[1-9]|[12]\d|3[01]))?$')
|
date_regex = re.compile(r'^(19|20)\d{2}(-(0[1-9]|1[0-2]))?(-(0[1-9]|[12]\d|3[01]))?$')
|
||||||
|
|
||||||
for fname in ["members.ts", "publications.ts", "lectures.ts", "standards.ts"]:
|
for fname in os.listdir(content_dir) if os.path.exists(content_dir) else []:
|
||||||
fpath = os.path.join(content_dir, fname)
|
if fname.endswith(".ts"):
|
||||||
if not os.path.exists(fpath):
|
fpath = os.path.join(content_dir, fname)
|
||||||
errors.append(f"Missing content file: {fname}")
|
with open(fpath, "r", encoding="utf-8") as f:
|
||||||
continue
|
text = f.read()
|
||||||
with open(fpath, "r", encoding="utf-8") as f:
|
if text.startswith('\ufeff'):
|
||||||
text = f.read()
|
errors.append(f"BOM (U+FEFF) found in {fname}")
|
||||||
|
|
||||||
if text.startswith('\ufeff'):
|
for p in intl_p + dom_p + pat_p:
|
||||||
errors.append(f"BOM (U+FEFF) found in {fname}")
|
for field in ["publishedAt", "applicationAt", "registrationAt"]:
|
||||||
|
val = p.get(field)
|
||||||
|
if val and not date_regex.match(val):
|
||||||
|
errors.append(f"Invalid ISO 8601 date in publication '{p.get('title')}': {field}='{val}'")
|
||||||
|
|
||||||
dates = re.findall(r'"(publishedAt|applicationAt|registrationAt|graduatedAt)": "([^"]+)"', text)
|
for m in alumni_m:
|
||||||
for k, d in dates:
|
val = m.get("graduatedAt")
|
||||||
if not date_regex.match(d):
|
if val and not date_regex.match(val):
|
||||||
errors.append(f"Invalid ISO 8601 or out-of-bounds date in {fname}: {k}='{d}'")
|
errors.append(f"Invalid ISO 8601 date in alumnus '{m.get('ko')}': graduatedAt='{val}'")
|
||||||
|
|
||||||
# 3. Volume Cross-Check for Publications (Ensures volume date candidates match publishedAt)
|
# 7. Volume Cross-Check for Publications
|
||||||
MON_PAT = r'(?:January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)'
|
MON_PAT = r'(?:January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)'
|
||||||
|
|
||||||
for pub in intl_p + dom_p:
|
for pub in intl_p + dom_p:
|
||||||
|
|||||||
@@ -86,31 +86,38 @@ def test_build():
|
|||||||
print(f"❌ Build failed:\n{res.stdout}\n{res.stderr}")
|
print(f"❌ Build failed:\n{res.stdout}\n{res.stderr}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
lines = res.stdout.splitlines()
|
# Parse exact Next.js route table output lines (e.g. "┌ ƒ /", "├ ○ /_not-found", "├ ƒ /publications", "├ ƒ /publications/[category]")
|
||||||
|
route_table_map = {}
|
||||||
# Verify exact dynamic routes
|
for line in res.stdout.splitlines():
|
||||||
|
m = re.match(r'^[┌├└]\s+([ƒ○●])\s+(\S+)', line.strip())
|
||||||
|
if m:
|
||||||
|
mode, route = m.group(1), m.group(2)
|
||||||
|
route_table_map[route] = mode
|
||||||
|
|
||||||
|
print(f"Parsed route modes from build table ({len(route_table_map)} routes): {route_table_map}")
|
||||||
|
|
||||||
|
# Check exact match for each dynamic route
|
||||||
for d_route in EXPECTED_DYNAMIC_ROUTES:
|
for d_route in EXPECTED_DYNAMIC_ROUTES:
|
||||||
found = False
|
mode = route_table_map.get(d_route)
|
||||||
for line in lines:
|
if mode != "ƒ":
|
||||||
if d_route in line and ("ƒ" in line or "Dynamic" in line):
|
print(f"❌ Gate 2 Violation: Expected dynamic route '{d_route}' has mode '{mode}', expected 'ƒ'")
|
||||||
found = True
|
|
||||||
break
|
|
||||||
if not found:
|
|
||||||
print(f"❌ Gate 2 Violation: Expected dynamic route '{d_route}' not marked with 'ƒ Dynamic' in build report")
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Verify exact static routes
|
# Check exact match for each static route
|
||||||
for s_route in EXPECTED_STATIC_ROUTES:
|
for s_route in EXPECTED_STATIC_ROUTES:
|
||||||
found = False
|
mode = route_table_map.get(s_route)
|
||||||
for line in lines:
|
if mode not in ("○", "●"):
|
||||||
if s_route in line and ("○" in line or "Static" in line):
|
print(f"❌ Gate 2 Violation: Expected static route '{s_route}' has mode '{mode}', expected '○' or '●'")
|
||||||
found = True
|
|
||||||
break
|
|
||||||
if not found:
|
|
||||||
print(f"❌ Gate 2 Violation: Expected static route '{s_route}' not marked with '○ Static' in build report")
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
print("✅ Gate 2 PASSED: Hybrid dynamic/static route allocation verified (6 dynamic routes, 4 static routes)")
|
# Check that no other unexpected routes exist in table
|
||||||
|
all_expected = set(EXPECTED_DYNAMIC_ROUTES + EXPECTED_STATIC_ROUTES)
|
||||||
|
found_routes = set(route_table_map.keys())
|
||||||
|
if all_expected != found_routes:
|
||||||
|
print(f"❌ Gate 2 Violation: Route set mismatch. Missing: {all_expected - found_routes}, Extra: {found_routes - all_expected}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
print("✅ Gate 2 PASSED: Hybrid dynamic/static route allocation verified (6 dynamic routes, 4 static routes with exact table matching)")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def test_tsc():
|
def test_tsc():
|
||||||
@@ -122,6 +129,13 @@ def test_tsc():
|
|||||||
print("✅ Gate 3 PASSED: TypeScript type check clean (exit code 0)")
|
print("✅ Gate 3 PASSED: TypeScript type check clean (exit code 0)")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
import socket
|
||||||
|
|
||||||
|
def get_free_port():
|
||||||
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||||
|
s.bind(('', 0))
|
||||||
|
return s.getsockname()[1]
|
||||||
|
|
||||||
def start_next_server(port=3000):
|
def start_next_server(port=3000):
|
||||||
print(f"\nStarting live Next.js server on port {port}...")
|
print(f"\nStarting live Next.js server on port {port}...")
|
||||||
server_env = os.environ.copy()
|
server_env = os.environ.copy()
|
||||||
@@ -222,10 +236,10 @@ def test_theme_tokens():
|
|||||||
print("✅ Gate 6 PASSED: Light/Dark theme CSS variables and Tailwind tokens present")
|
print("✅ Gate 6 PASSED: Light/Dark theme CSS variables and Tailwind tokens present")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def test_unittest_suite():
|
def test_unittest_suite(port=3000):
|
||||||
print("\n--- Gate 7: DOM & HTML Content Assertions (Unittest) ---")
|
print("\n--- Gate 7: DOM & HTML Content Assertions (Unittest) ---")
|
||||||
test_path = os.path.join(REFER_DIR, "tests", "e2e_test_suite.py")
|
test_path = os.path.join(REFER_DIR, "tests", "e2e_test_suite.py")
|
||||||
res = run_cmd([sys.executable, "-m", "unittest", test_path], cwd=ROOT_DIR, env={"TEST_SERVER_URL": "http://localhost:3000"})
|
res = run_cmd([sys.executable, "-m", "unittest", test_path], cwd=ROOT_DIR, env={"TEST_SERVER_URL": f"http://localhost:{port}"})
|
||||||
if res.returncode != 0:
|
if res.returncode != 0:
|
||||||
print(f"❌ Unittest suite failed:\n{res.stdout}\n{res.stderr}")
|
print(f"❌ Unittest suite failed:\n{res.stdout}\n{res.stderr}")
|
||||||
return False
|
return False
|
||||||
@@ -439,13 +453,14 @@ def main():
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Start live Next.js server once and run Gate 4, Gate 7, Gate 8
|
# Start live Next.js server once and run Gate 4, Gate 7, Gate 8
|
||||||
|
port = get_free_port()
|
||||||
server_proc = None
|
server_proc = None
|
||||||
try:
|
try:
|
||||||
server_proc = start_next_server(port=3000)
|
server_proc = start_next_server(port=port)
|
||||||
bodies = fetch_live_routes("http://localhost:3000")
|
bodies = fetch_live_routes(f"http://localhost:{port}")
|
||||||
|
|
||||||
success &= test_live_routes(bodies)
|
success &= test_live_routes(bodies)
|
||||||
success &= test_unittest_suite()
|
success &= test_unittest_suite(port=port)
|
||||||
success &= test_layout_architecture(bodies)
|
success &= test_layout_architecture(bodies)
|
||||||
finally:
|
finally:
|
||||||
if server_proc:
|
if server_proc:
|
||||||
|
|||||||
Reference in New Issue
Block a user