# =============================================================================
#  me.ttl — Chaipat Jainan's work as a knowledge graph
#  Vocabulary: cj-schema.ttl 1.13.0 (https://chaipat.cc/ns#)
#  Edit this file to update graph facts, entity aliases and explicit resource destinations.
#  Deterministic navigation uses the catalog; factual queries use SPARQL over the same graph.
#  Rebuild dependent graph data and run `npm run build:wiki` and `npm run validate` before committing.
# =============================================================================

@prefix cj:      <https://chaipat.cc/ns#> .
@prefix id:      <https://chaipat.cc/id/> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix skos:    <http://www.w3.org/2004/02/skos/core#> .
@prefix foaf:    <http://xmlns.com/foaf/0.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .

<https://chaipat.cc/me.ttl>
    dcterms:title "Chaipat Jainan — personal knowledge graph"@en ;
    dcterms:creator id:me ;
    dcterms:conformsTo <https://chaipat.cc/ns> ;
    dcterms:modified "2026-10-31"^^xsd:date ;
    rdfs:comment "Hand-written core: person, positions, organisations, skills. Public GitHub projects are in github.ttl (generated)." .

# -----------------------------------------------------------------------------
#  Person
# -----------------------------------------------------------------------------

id:me
    a foaf:Person ;
    foaf:name "Chaipat Jainan" ;
    rdfs:label "Chaipat Jainan" ;
    cj:shortLabel "Chaipat" ;
    cj:role "Software developer and researcher" ;
    cj:basedIn "Chiang Mai, Thailand" ;
    cj:status "Open to software roles in Chiang Mai; available to start immediately" ;
    foaf:mbox <mailto:contact@chaipat.cc> ;
    cj:github "https://github.com/AppleBoiy"^^xsd:anyURI ;
    cj:website "https://chaipat.cc"^^xsd:anyURI ;
    cj:linkedin "https://www.linkedin.com/in/chaipat-jainan"^^xsd:anyURI ;
    cj:speaks "Thai (native)" , "English (fluent)" ;
    cj:interest "Ontology and data modelling" , "Astronomy" , "Game localisation" ;
    cj:cvSkill id:Python , id:C , id:Swift , id:SQL , id:Assembly , id:PostgreSQL , id:Redis ,
        id:Docker , id:CICD , id:Git , id:Linux , id:HPC , id:OWL , id:SPARQL , id:KnowledgeGraphs ;
    cj:studies id:BScCS ;
    cj:held id:RoleNARIT , id:RoleJAIST , id:RoleDevOps , id:RoleTA ;
    cj:focus id:OntologyEngineering , id:KnowledgeGraphs , id:HPC ;
    cj:made
        id:MergerClustering , id:FaintStructures ,
        id:ADSOntology , id:SemanticExtraction ,
        id:AutoGrading , id:Teaching , id:KIWIS ,
        id:WordGames , id:GraphExplorer , id:SkyViewer , id:FigureArchive , id:StatusPage , id:ResearchOS ,
        id:StarHubTH , id:StardewThai , id:MopsCli ,
        id:HealthRec , id:KGFromText , id:NARITPaper , id:ThisSite .

id:BScCS
    a cj:Degree ;
    rdfs:label "B.Sc. Computer Science" ;
    cj:shortLabel "B.Sc. CS" ;
    cj:org id:CMU ;
    cj:expected "2027"^^xsd:gYear ;
    cj:detail "Fifth-year student" .

# -----------------------------------------------------------------------------
#  Organisations and other contexts
# -----------------------------------------------------------------------------

id:NARIT
    a foaf:Organization ;
    rdfs:label "National Astronomical Research Institute of Thailand (NARIT)" ;
    cj:shortLabel "NARIT" ;
    cj:city "Chiang Mai" ;
    cj:country "Thailand" .

id:JAIST
    a foaf:Organization ;
    rdfs:label "Japan Advanced Institute of Science and Technology (JAIST)" ;
    cj:shortLabel "JAIST" ;
    cj:city "Ishikawa" ;
    cj:country "Japan" .

id:CMU
    a foaf:Organization ;
    rdfs:label "Chiang Mai University, Department of Computer Science" ;
    cj:shortLabel "Chiang Mai University" ;
    cj:city "Chiang Mai" ;
    cj:country "Thailand" .

id:ChaipatCC
    a cj:Website ;
    rdfs:label "chaipat.cc research network" ;
    cj:shortLabel "chaipat.cc network" ;
    cj:url "https://chaipat.cc"^^xsd:anyURI .

id:OpenSource
    a cj:Community ;
    rdfs:label "Open source on GitHub" ;
    cj:shortLabel "Open source" ;
    cj:url "https://github.com/AppleBoiy"^^xsd:anyURI .

id:AcademicOutput
    a cj:Community ;
    rdfs:label "Academic output" ;
    cj:shortLabel "Papers" .

# -----------------------------------------------------------------------------
#  Positions
# -----------------------------------------------------------------------------

id:RoleNARIT
    a cj:Position ;
    rdfs:label "Research Assistant at NARIT" ;
    cj:shortLabel "Research Assistant" ;
    cj:title "Research Assistant, galactic archaeology and machine learning" ;
    cj:org id:NARIT ;
    cj:start "2026-04"^^xsd:gYearMonth ;
    cj:end "2026-10"^^xsd:gYearMonth ;
    cj:highlight
        "Developed an HDBSCAN clustering pipeline in Python to reconstruct galactic merger histories from large stellar datasets." ,
        "Applied AutoGluon models to detect faint stellar structures, running training and analysis workloads on HPC infrastructure." ,
        "Writing up the results as a paper (in preparation)." .

id:RoleJAIST
    a cj:Position ;
    rdfs:label "Joint researcher at JAIST" ;
    cj:shortLabel "Joint researcher" ;
    cj:title "Joint researcher in ontology engineering" ;
    cj:org id:JAIST ;
    cj:start "2025-06"^^xsd:gYearMonth ;
    cj:end "2025-09"^^xsd:gYearMonth ;
    cj:highlight
        "Designed OWL ontologies and semantic extraction pipelines to structure safety-testing knowledge for automated driving systems." ,
        "Validated models with SPARQL queries and orchestrated batch jobs with PBS on the KAGAYAKI HPC cluster." ,
        "Collaborated with an international research team, communicating results in English." .

id:RoleDevOps
    a cj:Position ;
    rdfs:label "DevOps contractor at Chiang Mai University" ;
    cj:shortLabel "DevOps contractor" ;
    cj:title "DevOps contractor" ;
    cj:org id:CMU ;
    cj:start "2024-06"^^xsd:gYearMonth ;
    cj:end "2024-12"^^xsd:gYearMonth ;
    cj:highlight
        "Built automated grading systems and supporting microservices used by students and instructors in live courses." ,
        "Containerised services with Docker and implemented CI/CD pipelines to standardise testing and deployment." .

id:RoleTA
    a cj:Position ;
    rdfs:label "Teaching assistant at Chiang Mai University" ;
    cj:shortLabel "Teaching assistant" ;
    cj:title "Teaching assistant" ;
    cj:org id:CMU ;
    cj:start "2022-08"^^xsd:gYearMonth ;
    cj:end "2025-03"^^xsd:gYearMonth ;
    cj:highlight
        "Taught and supported classes of 50+ students in Python programming and Assembly language." ,
        "Prepared exercises and course materials; explained technical concepts and debugged student code one-on-one." ;
    cj:detail "Supported classes of 50+ students in Python and Assembly" .

# -----------------------------------------------------------------------------
#  Works — NARIT
# -----------------------------------------------------------------------------

id:MergerClustering
    a cj:Project ;
    cj:theme id:ThemeML ;
    rdfs:label "Galactic merger-history clustering" ;
    cj:shortLabel "Merger clustering" ;
    cj:context id:NARIT ;
    cj:during id:RoleNARIT ;
    cj:uses id:HDBSCAN , id:Python , id:HPC ;
    cj:publicationStatus "Unpublished: a paper is in preparation" ;
    cj:description "HDBSCAN clustering pipeline that reconstructs galactic merger histories from large stellar datasets." .

id:FaintStructures
    a cj:Project ;
    cj:theme id:ThemeML ;
    rdfs:label "Faint stellar structure detection" ;
    cj:shortLabel "Faint structures" ;
    cj:context id:NARIT ;
    cj:during id:RoleNARIT ;
    cj:uses id:AutoGluon , id:Python , id:HPC ;
    cj:publicationStatus "Unpublished: a paper is in preparation" ;
    cj:description "AutoGluon models that detect faint stellar structures, run on HPC infrastructure." .

# -----------------------------------------------------------------------------
#  Works — JAIST
# -----------------------------------------------------------------------------

id:ADSOntology
    a cj:Project ;
    cj:theme id:ThemeOntology ;
    rdfs:label "ADS safety-testing ontology" ;
    cj:shortLabel "ADS ontology" ;
    cj:context id:JAIST ;
    cj:during id:RoleJAIST ;
    cj:uses id:OWL , id:OntologyEngineering , id:KnowledgeGraphs ;
    cj:description "OWL ontology that structures safety-testing knowledge for automated driving systems." .

id:SemanticExtraction
    a cj:Project ;
    cj:theme id:ThemeOntology ;
    rdfs:label "Semantic extraction pipeline" ;
    cj:shortLabel "Semantic extraction" ;
    cj:context id:JAIST ;
    cj:during id:RoleJAIST ;
    cj:uses id:SPARQL , id:Python , id:HPC ;
    cj:cluster "KAGAYAKI HPC cluster" ;
    cj:description "Pipeline that extracts semantic facts for ADS safety testing, validated with SPARQL and run as PBS jobs." .

# -----------------------------------------------------------------------------
#  Works — Chiang Mai University
# -----------------------------------------------------------------------------

id:AutoGrading
    a cj:Project ;
    cj:theme id:ThemeDevOps , id:ThemeTeaching ;
    rdfs:label "Automated grading system" ;
    cj:shortLabel "Auto grading" ;
    cj:context id:CMU ;
    cj:during id:RoleDevOps ;
    cj:uses id:Docker , id:CICD , id:Microservices , id:Python ;
    cj:description "Grading system and supporting microservices used by students and instructors in live courses." .

id:Teaching
    a cj:Project ;
    cj:theme id:ThemeTeaching ;
    rdfs:label "Teaching Python and Assembly" ;
    cj:shortLabel "Teaching" ;
    cj:context id:CMU ;
    cj:during id:RoleTA ;
    cj:uses id:Python , id:Assembly ;
    cj:description "Taught and supported classes of 50+ students; prepared exercises and explained concepts one-on-one." .

id:KIWIS
    a cj:Project ;
    rdfs:label "KIWIS" ;
    cj:context id:CMU ;
    cj:description "Knowledge Workspace for Integrated Science: the readable knowledge layer of the chaipat.cc research network, linking research notes, method ledgers, glossary entries and source provenance. It began as a wiki-how for the CS111 course; those guides live on under /legacy." .

# -----------------------------------------------------------------------------
#  Works — chaipat.cc
# -----------------------------------------------------------------------------

id:WordGames
    a cj:Project ;
    rdfs:label "Word games engine" ;
    cj:shortLabel "Word games" ;
    skos:altLabel "Wordplay" ;
    cj:context id:ChaipatCC ;
    cj:uses id:PostgreSQL , id:Redis , id:Trie ;
    cj:url "https://wp.chaipat.cc"^^xsd:anyURI ;
    cj:liveUrl "https://wp.chaipat.cc"^^xsd:anyURI ;
    cj:description "Wordplay: a collection of word puzzles (a Wordle-style game, Spelling Bee and more) on React and Vite, with an Express API over a Postgres and Redis dictionary engine using Trie-based lookup." .

id:ThisSite
    a cj:Project ;
    rdfs:label "chaipat.cc, the ask-me-anything site" ;
    cj:shortLabel "chaipat.cc" ;
    skos:altLabel "this site" , "this website" , "ask me anything" , "chaipat.cc site" ;
    cj:context id:ChaipatCC ;
    cj:kind "app" ;
    cj:theme id:ThemeOntology , id:ThemeWeb ;
    cj:uses id:JavaScript , id:HTMLCSS , id:SPARQL , id:OWL , id:KnowledgeGraphs , id:NodeJS , id:Vercel ,
        id:PostgreSQL , id:Redis , id:GitHubActions ;
    cj:url "https://chaipat.cc"^^xsd:anyURI ;
    cj:liveUrl "https://chaipat.cc"^^xsd:anyURI ;
    cj:begun "2022"^^xsd:gYear ;
    cj:origin "It grew out of the personal site he started in his first year at university, in 2022, and has been rebuilt many times on top of it; parts of that first codebase are still in it." ;
    cj:firstCommit "2026-04-24"^^xsd:date ;
    cj:lastCommit "2026-11-04"^^xsd:date ;
    cj:commitCount 334 ;
    cj:description "This site: a portfolio for finding entities and their live sites, about pages and source code, as well as asking questions about his work. A Turtle knowledge graph supplies facts to a browser SPARQL engine and a shared resource catalog, next to a wiki with full-text search, a timeline and a graph view of the graph and its ontology." .

# components of this site (cj:Component, schema 1.3)

id:SiteEngine
    a cj:Component ;
    rdfs:label "Question engine (chaipat.cc)" ;
    cj:shortLabel "Question engine" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "src/engine.js" , "src/answer.js" , "src/resources.js" ;
    cj:implements id:EntityLinking , id:ReciprocalRankFusion , id:DamerauLevenshtein ;
    cj:uses id:JavaScript ;
    cj:description "Reads a typed question: links the things it names, decides what kind of question it is, gathers candidates from the graph and the wiki, fuses them into one ranking and picks how to answer. It also corrects misspelled words." .

id:SiteSPARQL
    a cj:Component ;
    rdfs:label "SPARQL engine (chaipat.cc)" ;
    cj:shortLabel "SPARQL engine" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "src/kg.js" ;
    cj:uses id:SPARQL , id:JavaScript ;
    cj:description "Runs SPARQL SELECT queries (with OPTIONAL, UNION, FILTER and ORDER BY) over the whole graph in the visitor's browser. The queries used for factual answers are shown in the SPARQL tab; entity resource selection reads the same graph separately." .

id:SiteReasoner
    a cj:Component ;
    rdfs:label "Reasoner (chaipat.cc)" ;
    cj:shortLabel "Reasoner" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "src/reason.js" ;
    cj:implements id:OntologyReasoning ;
    cj:handles id:TurtleFormat ;
    cj:uses id:JavaScript , id:OWL ;
    cj:description "Applies the ontology to the graph when it loads: subclasses, subproperties, symmetric and inverse properties, until nothing new follows. The facts it adds are marked as inferred wherever they are shown." .

id:SiteBrand
    a cj:Component ;
    rdfs:label "Logo and doodles (chaipat.cc)" ;
    cj:shortLabel "Logo and doodles" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "src/brand.js" ;
    cj:uses id:JavaScript , id:HTMLCSS ;
    cj:description "The site's mark: a cj monogram drawn as a graph, the j's dot a node linked to the c, after the cj: vocabulary every fact here is written in. On some days it dresses up as a doodle, and his name takes a matching font and animation." .

id:SiteTurtle
    a cj:Component ;
    rdfs:label "Turtle parser (chaipat.cc)" ;
    cj:shortLabel "Turtle parser" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "src/turtle.js" ;
    cj:handles id:TurtleFormat ;
    cj:uses id:JavaScript ;
    cj:description "Parses the graph's Turtle files into triples, in the browser and in the build scripts alike." .

id:SiteWikiSearch
    a cj:Component ;
    rdfs:label "Wiki full-text search (chaipat.cc)" ;
    cj:shortLabel "Wiki full-text search" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "src/search.js" ;
    cj:implements id:BM25 ;
    cj:uses id:JavaScript ;
    cj:description "Splits every wiki article into passages and ranks them for a question with BM25; it finds the passage quoted under an answer and powers the wiki's own search." .

id:SiteTimeline
    a cj:Component ;
    rdfs:label "Timeline view (chaipat.cc)" ;
    cj:shortLabel "Timeline view" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "src/timeline.js" ;
    cj:uses id:JavaScript , id:HTMLCSS ;
    cj:description "Draws every role and every piece of work on one time axis, each work as a line from its first commit to its last; years, roles and themes are filters." .

id:SitePages
    a cj:Component ;
    rdfs:label "Page builder (chaipat.cc)" ;
    cj:shortLabel "Page builder" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "scripts/build-pages.mjs" ;
    cj:handles id:JSONLD , id:Sitemap ;
    cj:uses id:NodeJS ;
    cj:description "Prerenders a page for every entity in the graph, with structured data, and writes the sitemap, so search engines can read the wiki without running JavaScript." .

id:SiteFactCheck
    a cj:Component ;
    rdfs:label "Fact check (chaipat.cc)" ;
    cj:shortLabel "Fact check" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "scripts/factcheck.mjs" ;
    cj:uses id:NodeJS ;
    cj:description "Checks before every deploy that each fact drawn from the wiki is supported by its article, and that articles agree with the graph's dates and links." .

id:SiteCV
    a cj:Component ;
    rdfs:label "CV builder (chaipat.cc)" ;
    cj:shortLabel "CV builder" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "scripts/build-cv.mjs" ;
    cj:handles id:PDFFormat ;
    cj:uses id:NodeJS , id:GitHubActions , id:Playwright ;
    cj:description "Builds the one-page CV from the graph; a GitHub Actions job prints it to PDF with a headless browser on every change." .

id:SiteQuestionLog
    a cj:Component ;
    rdfs:label "Question log (chaipat.cc)" ;
    cj:shortLabel "Question log" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "api/log.js" ;
    cj:integrates id:Neon ;
    cj:uses id:PostgreSQL , id:Vercel ;
    cj:description "Stores the questions visitors type (text only, no IP address) in Postgres, with votes on answers, so questions the site answers badly can be found; a private stats page reads it." .

id:SiteMail
    a cj:Component ;
    rdfs:label "Contact form (chaipat.cc)" ;
    cj:shortLabel "Contact form" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "api/mail.js" ;
    cj:integrates id:Resend ;
    cj:uses id:Vercel ;
    cj:description "Saves messages sent through the site's Mail page and forwards them to his inbox." .

id:SiteEggs
    a cj:Component ;
    rdfs:label "Easter eggs (chaipat.cc)" ;
    cj:shortLabel "Easter eggs" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "src/eggs.js" ;
    cj:uses id:JavaScript ;
    cj:description "A handful of queries that do something other than search, the way some search engines hide them." .

id:SiteGraph
    a cj:Component ;
    rdfs:label "Graph view (chaipat.cc)" ;
    cj:shortLabel "Graph view" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "src/graph.js" ;
    cj:uses id:JavaScript , id:HTMLCSS ;
    cj:description "Draws the whole knowledge graph, or the classes of its ontology, as a network to search, walk and tour, opening on an overview of his key work; the layout is settled at deploy time." .

id:SiteTime
    a cj:Component ;
    rdfs:label "Time data (chaipat.cc)" ;
    cj:shortLabel "Time data" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "scripts/build-time-ttl.mjs" ;
    cj:uses id:NodeJS , id:GitHubActions ;
    cj:description "Generates the years of his work and every work's months of work (commits, and the days that had them) from the repositories' histories, so questions about any span of dates find the work done in it." .

id:SiteAudit
    a cj:Component ;
    rdfs:label "Accessibility audit (chaipat.cc)" ;
    cj:shortLabel "Accessibility audit" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "tests/audit.mjs" ;
    cj:uses id:NodeJS , id:GitHubActions ;
    cj:description "Checks every main page on a desktop, a phone and in dark mode for names, labels, headings, contrast, tap targets and speed; runs weekly in CI with axe-core and commits a report." .

id:SiteOffline
    a cj:Component ;
    rdfs:label "Offline support (chaipat.cc)" ;
    cj:shortLabel "Offline support" ;
    cj:componentOf id:ThisSite ;
    cj:sourceFile "sw.js" ;
    cj:uses id:JavaScript ;
    cj:description "A service worker that keeps the page, its scripts, the knowledge graph and every wiki article in a cache, so the site keeps answering without a connection." .

id:GraphExplorer
    a cj:Project ;
    rdfs:label "Knowledge-graph explorer" ;
    cj:shortLabel "Graph explorer" ;
    skos:altLabel "Graph Laboratory" ;
    cj:context id:ChaipatCC ;
    cj:uses id:KnowledgeGraphs ;
    cj:url "https://graph.chaipat.cc"^^xsd:anyURI ;
    cj:liveUrl "https://graph.chaipat.cc"^^xsd:anyURI ;
    cj:description "Graph Laboratory: a research workspace for exploring large system-of-systems datasets as force-directed graphs, built with Next.js, Postgres and Redis." .

id:SkyViewer
    a cj:Project ;
    cj:theme id:ThemeResearchTools ;
    rdfs:label "Sky viewer" ;
    skos:altLabel "Project SKY // Lab" ;
    cj:context id:ChaipatCC ;
    cj:url "https://sky.chaipat.cc"^^xsd:anyURI ;
    cj:liveUrl "https://sky.chaipat.cc"^^xsd:anyURI ;
    cj:description "Astronomy data viewer for FITS files: shows their raster images and binary tables with the observation's metadata." .

id:FigureArchive
    a cj:Project ;
    cj:theme id:ThemeResearchTools ;
    rdfs:label "Figure archive" ;
    cj:context id:ChaipatCC ;
    cj:url "https://archive.chaipat.cc"^^xsd:anyURI ;
    cj:liveUrl "https://archive.chaipat.cc"^^xsd:anyURI ;
    cj:description "Searchable archive of the records behind his research, about 290 figures, tables and files from the M81 and M82 faint-structure work and a knowledge-graph safety collection, each traceable to the analysis it came from." .

id:StatusPage
    a cj:Project ;
    cj:theme id:ThemeDevOps ;
    rdfs:label "System status page" ;
    cj:shortLabel "Status page" ;
    cj:context id:ChaipatCC ;
    cj:url "https://infra.chaipat.cc"^^xsd:anyURI ;
    cj:liveUrl "https://infra.chaipat.cc"^^xsd:anyURI ;
    cj:description "Infrastructure dashboard of the research network, laid out as a control console: health, regions, edge connections and an event log." .

id:ResearchOS
    a cj:Project ;
    rdfs:label "research-os" ;
    cj:context id:ChaipatCC ;
    cj:description "Research OS: a self-hosted platform for managing research documents and heavy files (PDF, LaTeX, datasets, model weights) and moving them between machines." .

# -----------------------------------------------------------------------------
#  Works — open source
# -----------------------------------------------------------------------------

id:StarHubTH
    a cj:Project ;
    rdfs:label "StarHubTH" ;
    cj:context id:OpenSource ;
    cj:uses id:Swift ;
    cj:description "Swift app for Stardew Valley players: launch the game vanilla or through SMAPI, enable and disable mods, install mods by drag and drop, filter them by tags, and apply Thai patches." .

id:StardewThai
    a cj:Project ;
    rdfs:label "Stardew Valley Thai translations" ;
    cj:shortLabel "Stardew Thai" ;
    cj:context id:OpenSource ;
    cj:description "Collection of Thai translation patches for Stardew Valley mods, crediting each original author." .

id:MopsCli
    a cj:Project ;
    rdfs:label "mops-cli" ;
    cj:context id:OpenSource ;
    cj:uses id:C ;
    cj:description "MOPS, the Multipurpose Operations CLI: a lightweight C utility for MLOps and DevOps work, covering system diagnostics, background tasks and cloud operations." .

# -----------------------------------------------------------------------------
#  Works — papers
# -----------------------------------------------------------------------------

id:HealthRec
    a cj:Paper ;
    rdfs:label "Ontology-augmented health recommendation" ;
    cj:shortLabel "Health-rec paper" ;
    cj:context id:AcademicOutput ;
    cj:uses id:OWL , id:KnowledgeGraphs ;
    cj:description "Ontology-augmented personal healthcare service recommendation for Thailand: an OWL 2 DL ontology of diseases, symptoms, services, facilities, locations and insurance, queried with SPARQL and reasoned over with SWRL rules. Built for an ontology-engineering course, with a full written report." .

id:NARITPaper
    a cj:Paper ;
    rdfs:label "Galactic archaeology paper (in preparation)" ;
    cj:shortLabel "NARIT paper" ;
    cj:context id:AcademicOutput ;
    cj:during id:RoleNARIT ;
    cj:relatedTo id:MergerClustering , id:FaintStructures ;
    cj:uses id:Python , id:HPC ;
    cj:publicationStatus "In preparation" ;
    cj:description "A paper on his galactic-archaeology research at NARIT, now being written. Its title, results and venue will be added once it is published." .

id:KGFromText
    a cj:Paper ;
    rdfs:label "Knowledge graph construction from unstructured data" ;
    cj:shortLabel "KG-from-text paper" ;
    cj:context id:AcademicOutput ;
    cj:uses id:KnowledgeGraphs ;
    cj:description "Pipeline that builds knowledge graphs from unstructured text: entity and relation extraction with spaCy, graph construction with NetworkX, export to edge lists, adjacency matrices and GraphML." .

# -----------------------------------------------------------------------------
#  Skills
# -----------------------------------------------------------------------------

id:Python              a cj:Skill ; rdfs:label "Python" ;                         cj:category "programming language" .
id:C                   a cj:Skill ; rdfs:label "C" ;                              cj:category "programming language" .
id:Swift               a cj:Skill ; rdfs:label "Swift" ;                          cj:category "programming language" .
id:Assembly            a cj:Skill ; rdfs:label "Assembly" ;                       cj:category "programming language" .
id:OWL                 a cj:Skill ; rdfs:label "OWL" ;                            cj:category "semantic web" .
id:SPARQL              a cj:Skill ; rdfs:label "SPARQL" ;                         cj:category "semantic web" .
id:KnowledgeGraphs     a cj:Skill ; rdfs:label "Knowledge graphs" ;               cj:category "semantic web" .
id:OntologyEngineering a cj:Skill ; rdfs:label "Ontology engineering" ;           cj:category "semantic web" ; cj:shortLabel "Ontology eng." .
id:HDBSCAN             a cj:Skill ; rdfs:label "HDBSCAN clustering" ;             cj:category "machine learning" ; cj:shortLabel "HDBSCAN" .
id:AutoGluon           a cj:Skill ; rdfs:label "AutoGluon" ;                      cj:category "machine learning" .
id:HPC                 a cj:Skill ; rdfs:label "HPC and PBS job orchestration" ;  cj:category "infrastructure" ; cj:shortLabel "HPC / PBS" .
id:Docker              a cj:Skill ; rdfs:label "Docker" ;                         cj:category "infrastructure" .
id:CICD                a cj:Skill ; rdfs:label "CI/CD" ;                          cj:category "infrastructure" .
id:Microservices       a cj:Skill ; rdfs:label "Microservices" ;                  cj:category "architecture" .
id:PostgreSQL          a cj:Skill ; rdfs:label "PostgreSQL" ;                     cj:category "database" .
id:Redis               a cj:Skill ; rdfs:label "Redis" ;                          cj:category "database" .
id:Trie                a cj:Skill ; rdfs:label "Trie data structure" ;            cj:category "data structures" ; cj:shortLabel "Trie" .

# -----------------------------------------------------------------------------
#  Featured work: labelled on the timeline
# -----------------------------------------------------------------------------

id:MergerClustering cj:featured true .
id:FaintStructures cj:featured true .
id:ADSOntology cj:featured true .
id:SemanticExtraction cj:featured true .
id:AutoGrading cj:featured true .
id:Teaching cj:featured true .
id:KIWIS cj:featured true .
id:WordGames cj:featured true .
id:GraphExplorer cj:featured true .
id:SkyViewer cj:featured true .
id:FigureArchive cj:featured true .
id:StatusPage cj:featured true .
id:ResearchOS cj:featured true .
id:StarHubTH cj:featured true .
id:StardewThai cj:featured true .
id:MopsCli cj:featured true .
id:HealthRec cj:featured true .
id:KGFromText cj:featured true .

id:Git
    a cj:Skill ;
    rdfs:label "Git" ;
    cj:category "tooling" .
