<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:media="http://search.yahoo.com/mrss/"
	
	>

<channel>
	<title>Hanju Seo</title>
	<link>https://hanjuseo.com</link>
	<description>Hanju Seo</description>
	<pubDate>Tue, 23 May 2023 21:25:32 +0000</pubDate>
	<generator>https://hanjuseo.com</generator>
	<language>en</language>
	
		
	<item>
		<title>home</title>
				
		<link>https://hanjuseo.com/home</link>

		<pubDate>Tue, 23 May 2023 21:25:32 +0000</pubDate>

		<dc:creator>Hanju Seo</dc:creator>

		<guid isPermaLink="true">https://hanjuseo.com/home</guid>

		<description>
  @import url('https://fonts.googleapis.com/css2?family=Tinos:ital,wght@0,400;0,700;1,400&#38;family=Noto+Sans+KR:wght@300;400;500&#38;display=swap');

  .landing-wrap {
    display: grid;
    grid-template-columns: 1.05fr 0.95fr;
    min-height: 100vh;
    background: #ffffff;
    text-align: left !important;
    overflow-x: hidden;
    box-sizing: border-box;
  }

  .landing-wrap *,
  .landing-index * {
    text-align: left;
    box-sizing: border-box;
  }

  /* 왼쪽 글 영역 여백: 위 / 오른쪽 / 아래 / 왼쪽 */
  .landing-left {
    padding: 5.8rem 3rem 4rem 6rem;
    font-family: 'Tinos', 'Times New Roman', Times, serif;
    text-align: left !important;
    min-width: 0;
  }

  .landing-right {
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: flex-start;
    justify-content: center;
    background: #fff;
    padding-top: 2%;
    min-width: 0;
  }

  .landing-right iframe {
    width: 100%;
    height: 78%;
    border: none;
    display: block;
    pointer-events: auto;
  }

  .landing-bio {
    font-family: 'Tinos', 'Times New Roman', Times, serif;
    font-size: 1.75rem;
    font-weight: 400;
    line-height: 1.35;
    color: #000;
    letter-spacing: 0;
    max-width: 620px;
    margin: 0 0 1.5rem 0;
    overflow-wrap: break-word;
  }

  /* 한글: 고딕, 크기는 조금 작게 줄 간격은 조금 넓게 */
  .landing-wrap .lang-ko {
    font-family: 'Noto Sans KR', 'Apple SD Gothic Neo', 'Malgun Gothic', sans-serif;
    font-weight: 400;
    letter-spacing: -0.01em;
    word-break: keep-all;
    overflow-wrap: anywhere;
  }
  .landing-bio .lang-ko,
  .landing-reach .lang-ko {
    font-size: 0.8em;
    line-height: 1.75;
  }
  .landing-wrap .lang-ko i,
  .landing-reach .reach-label .lang-ko,
  .index-toggle .lang-ko {
    font-style: normal;
  }

  /* 이름: 밑줄 유지 */
  .landing-left a.name-link,
  .landing-left a.name-link:link,
  .landing-left a.name-link:visited {
    color: #000 !important;
    text-decoration: underline !important;
    text-underline-offset: 2px;
    text-decoration-thickness: 1px;
    transition: opacity 0.2s ease;
  }
  .landing-left a.name-link:hover {
    opacity: 0.55;
    color: #000 !important;
  }

  /* 프로젝트, Reading the Living, EarthCode, 연락처 링크: 밑줄 없음, 회색에서 호버 시 검정 */
  .landing-left a.proj-link,
  .landing-left a.proj-link:link,
  .landing-left a.proj-link:visited {
    color: rgba(0, 0, 0, 0.42) !important;
    text-decoration: none !important;
    transition: color 0.2s ease;
  }
  .landing-left a.proj-link:hover {
    color: #000 !important;
    text-decoration: none !important;
  }

  /* Index: 프로젝트 문단 바로 아랫줄, 이탤릭, 글자 자체가 버튼 */
  .landing-bio.index-line {
    margin-top: -0.6rem;
  }
  .index-toggle {
    font-style: italic;
    color: rgba(0, 0, 0, 0.42);
    cursor: pointer;
    transition: color 0.2s ease;
  }
  .index-toggle:hover,
  body.index-open .index-toggle {
    color: #000;
  }

  /* 연락처: 이름표와 내용을 한 줄에 */
  .landing-reach {
    margin-top: 2.6rem;
    max-width: 620px;
  }

  .landing-reach p {
    font-family: 'Tinos', 'Times New Roman', Times, serif;
    font-size: 1.75rem;
    font-weight: 400;
    line-height: 1.35;
    color: #000;
    margin: 0;
    overflow-wrap: anywhere;
  }

  .landing-reach .reach-label {
    display: inline-block;
    min-width: 9.5rem;
    font-style: italic;
  }

  /* 펼쳐지는 목록: 높이는 스크립트가 실제 높이로 열고 닫음 (열 때와 닫을 때 같은 속도) */
  .landing-index,
  .landing-index-m {
    height: 0;
    opacity: 0;
    overflow: hidden;
    background: #ffffff;
    transition: height 0.8s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.6s ease;
  }
  .landing-index .index-inner {
    padding: 2rem 3rem 6rem 6rem;
  }
  /* 데스크톱에서는 모바일 목록을 쓰지 않음 */
  .landing-index-m {
    display: none;
  }

  /* 원래 홈의 프로젝트 격자 */
  .project-cell {
    padding: 0.75%;
    cursor: default;
    margin-bottom: 0 !important;
    min-width: 0;
  }

  .project-cell .img-wrap {
    display: block !important;
    overflow: hidden !important;
    border-radius: 4px;
    line-height: 0;
    font-size: 0;
    margin-bottom: 0.8em;
  }

  .project-cell .img-wrap img {
    display: block;
    width: 100%;
    height: auto;
    border-radius: 0;
    vertical-align: bottom;
    transition: transform 0.35s ease;
  }

  .project-cell:hover .img-wrap img {
    transform: scale(1.06);
  }

  .project-cell small {
    display: block;
    margin-top: 0.5em;
    color: rgba(0, 0, 0, 0.35);
    transition: color 0.25s ease;
    line-height: 1.4;
  }

  .project-cell:hover small {
    color: rgba(0, 0, 0, 0.85);
  }

  .project-cell small a,
  .project-cell small a:link,
  .project-cell small a:visited {
    color: inherit !important;
    text-decoration: none !important;
  }

  .project-cell sub {
    display: block;
    margin-top: 0.3em;
    color: rgba(0, 0, 0, 0.35);
    font-size: 0.85em;
    line-height: 1.4;
  }

  .project-row {
    margin-bottom: 0;
  }

  .project-row-gap {
    height: 2.5em;
  }

  .img-hover-box {
    position: fixed;
    top: 0; left: 0;
    width: 340px;
    z-index: 99999;
    display: none;
    pointer-events: none;
    border-radius: 4px;
    overflow: hidden;
    box-shadow: 0 8px 24px rgba(0,0,0,0.15);
  }
  .img-hover-box img {
    width: 100%;
    height: auto;
    display: block;
  }

  /* 터치 화면에서는 호버 이미지와 확대 효과 끄기 */
  @media (hover: none) {
    .img-hover-box { display: none !important; }
    .project-cell:hover .img-wrap img { transform: none; }
  }

  /* ---------- 모바일 ---------- */
  @media (max-width: 900px) {
    .landing-wrap {
      grid-template-columns: minmax(0, 1fr);
      min-height: 0;
      width: 100%;
      max-width: 100vw;
    }

    /* 포인트 클라우드: 맨 위, 고정 높이 */
    /* 포인트 클라우드는 좌우 여백 없이 화면 폭 전체 사용 */
    .landing-right {
      order: -1;
      display: block;
      height: auto;
      padding: 1.2rem 0 0 0;
    }
    /* 모바일: 포인트 클라우드 칸 높이를 원래보다 10% 낮게
       (모델이 칸 높이에 맞춰 같이 10% 작아지고, 아래 글도 그만큼 올라감) */
    .landing-right iframe {
      width: 100% !important;
      height: min(94.5vw, 56vh) !important;
      min-height: 270px;
    }

    /* 글: 화면 폭 안에서 줄바꿈 */
    .landing-left {
      padding: 1.2rem 1.2rem 2.5rem 1.2rem;
      width: 100%;
      max-width: 100vw;
    }
    .landing-bio,
    .landing-reach p {
      font-size: 1.15rem;
      line-height: 1.42;
      max-width: 100%;
    }
    .landing-bio {
      margin-bottom: 1.1rem;
    }
    .landing-bio .lang-ko,
    .landing-reach .lang-ko {
      font-size: 0.86em;
      line-height: 1.7;
    }
    .landing-bio.index-line {
      margin-top: -0.3rem;
    }

    /* 연락처: 이름표를 윗줄, 내용을 아랫줄로 */
    .landing-reach {
      margin-top: 1.8rem;
    }
    .landing-reach p {
      margin-bottom: 0.7rem;
    }
    .landing-reach .reach-label {
      display: block;
      min-width: 0;
    }

    /* Index: 모바일에서는 데스크톱용 격자를 숨기고 모바일 전용 목록을 씀 */
    .landing-index {
      display: none !important;
    }
    .landing-index-m {
      display: block;
      width: 100%;
      max-width: 100vw;
    }
  }

  /* ---------- 모바일 전용 Index 목록 (2열 작은 썸네일) ---------- */
  .landing-index-m .index-inner-m {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: 0.9rem;
    row-gap: 1.4rem;
    padding: 0.5rem 1.2rem 4rem 1.2rem;
    box-sizing: border-box;
  }
  .landing-index-m a.m-cell,
  .landing-index-m a.m-cell:link,
  .landing-index-m a.m-cell:visited {
    display: block;
    min-width: 0;
    text-decoration: none !important;
    color: #000 !important;
  }
  .landing-index-m .m-thumb {
    display: block;
    width: 100%;
    height: 0;
    padding-top: 75%;
    border-radius: 4px;
    background-color: #f2f2f2;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
  }
  .landing-index-m .m-title {
    display: block;
    margin-top: 0.5em;
    font-family: 'Tinos', 'Times New Roman', Times, serif;
    font-size: 0.95rem;
    line-height: 1.3;
    color: rgba(0, 0, 0, 0.85);
    overflow-wrap: anywhere;
  }
  .landing-index-m .m-year {
    display: block;
    margin-top: 0.15em;
    font-family: 'Tinos', 'Times New Roman', Times, serif;
    font-size: 0.75rem;
    color: rgba(0, 0, 0, 0.4);
  }

  /* 랜딩 페이지에서만 Cargo Backdrop 숨김 */
  body.landing-active &#62; canvas,
  body.landing-active [id*="backdrop"],
  body.landing-active [class*="backdrop"] {
    display: none !important;
  }



(function() {
  // Cargo가 페이지를 다시 끼워 넣을 때 스크립트가 또 실행되어도 한 번만 설정
  if (window.__hsLandingInit) {
    if (window.__hsApplyLanding) window.__hsApplyLanding();
    return;
  }
  window.__hsLandingInit = true;

  const isEdit = window.location.href.indexOf('cargo') !== -1 &#124;&#124;
                 document.body.classList.contains('editing') &#124;&#124;
                 window.location.search.indexOf('edit') !== -1 &#124;&#124;
                 window.self !== window.top;

  if (!isEdit) {
    document.addEventListener('contextmenu', function(e) {
      if (e.target.closest('iframe')) return;
      e.preventDefault();
    });
    const s = document.createElement('style');
    s.innerHTML = `
      body * { -webkit-user-select:none; -moz-user-select:none; user-select:none; }
      iframe, iframe * { user-select:auto !important; pointer-events:auto !important; }
      img { -webkit-user-drag:none; pointer-events:none; }
      a { pointer-events:auto !important; cursor:pointer !important; }
      a img { pointer-events:auto !important; }
    `;
    document.head.appendChild(s);
  }

  // 랜딩 페이지가 화면에 실제로 보일 때만 랜딩으로 판단
  function landingVisible() {
    const w = document.querySelector('.landing-wrap');
    return !!(w &#38;&#38; w.offsetWidth &#62; 0 &#38;&#38; w.getClientRects().length &#62; 0);
  }

  // 포인트 클라우드 다시 불러오기
  function pointCloudFrame() {
    return document.querySelector('.landing-wrap iframe[data-original-src]');
  }
  let reloadTimer = null;
  function reloadPointCloud() {
    clearTimeout(reloadTimer);
    // 화면에 크기가 잡힌 뒤에 다시 불러오도록 잠깐 기다림
    // (빈 페이지를 거치지 않고 주소 끝 숫자만 바꿔서 다시 불러옴: 빈 칸으로 멈추는 일 방지)
    reloadTimer = setTimeout(function() {
      const iframe = pointCloudFrame();
      if (!iframe &#124;&#124; !landingVisible()) return;
      const base = iframe.getAttribute('data-original-src');
      if (!base) return;
      iframe.src = base + (base.indexOf('?') === -1 ? '?' : '&#38;') + 'r=' + Date.now();
    }, 350);
  }

  // 안전장치: 포인트 클라우드 칸이 빈 페이지로 남아 있으면 원래 주소로 되돌림
  setInterval(function() {
    if (!landingVisible()) return;
    const iframe = pointCloudFrame();
    if (!iframe) return;
    const base = iframe.getAttribute('data-original-src');
    const cur = iframe.getAttribute('src') &#124;&#124; '';
    if (base &#38;&#38; cur.indexOf(base) !== 0) iframe.src = base;
  }, 1500);

  // 포인트 클라우드 크기가 0에서 생기거나 폭이 크게 바뀌면 다시 불러오기 (모바일 대응)
  function watchFrameSize() {
    const f = pointCloudFrame();
    if (!f &#124;&#124; f.__hsWatched &#124;&#124; typeof ResizeObserver === 'undefined') return;
    f.__hsWatched = true;
    let prevW = f.clientWidth, prevH = f.clientHeight;
    new ResizeObserver(function() {
      const w = f.clientWidth, h = f.clientHeight;
      const appeared = (prevW &#60; 10 &#124;&#124; prevH &#60; 10) &#38;&#38; w &#62;= 10 &#38;&#38; h &#62;= 10;
      const bigChange = prevW &#62;= 10 &#38;&#38; Math.abs(w - prevW) &#62; 80;
      if (appeared &#124;&#124; bigChange) reloadPointCloud();
      prevW = w; prevH = h;
    }).observe(f);
  }

  // 랜딩에서만 바깥 배경 흰색
  function paintOuter(onLanding) {
    const wrap = document.querySelector('.landing-wrap');
    if (onLanding &#38;&#38; wrap) {
      let el = wrap.parentElement;
      while (el &#38;&#38; el !== document.documentElement) {
        if (!el.hasAttribute('data-landing-painted')) {
          el.setAttribute('data-landing-painted', el.style.cssText &#124;&#124; ' ');
          el.style.setProperty('background-color', '#ffffff', 'important');
          el.style.setProperty('max-width', 'none', 'important');
        }
        el = el.parentElement;
      }
      document.documentElement.style.setProperty('background-color', '#ffffff', 'important');
    } else {
      document.querySelectorAll('[data-landing-painted]').forEach(function(el) {
        el.style.cssText = el.getAttribute('data-landing-painted').trim();
        el.removeAttribute('data-landing-painted');
      });
      document.documentElement.style.removeProperty('background-color');
    }
  }

  // 랜딩이 다시 나타나는 순간을 감지
  let wasLanding = null;
  let lastFrame = null;

  let pending = false;
  function applyLanding() {
    if (pending) return;
    pending = true;
    requestAnimationFrame(function() {
      pending = false;
      const onLanding = landingVisible();
      // 상단 메뉴 숨김은 메뉴 페이지의 CSS가 이 클래스를 보고 처리
      document.body.classList.toggle('landing-active', onLanding);
      if (!onLanding &#38;&#38; document.body.classList.contains('index-open')) {
        document.body.classList.remove('index-open');
        resetIndexLists();
      }
      paintOuter(onLanding);

      if (onLanding) {
        watchFrameSize();
        const frame = pointCloudFrame();
        const cameBack = wasLanding === false &#124;&#124; (lastFrame &#38;&#38; frame !== lastFrame);
        const arrivedLater = wasLanding === null &#38;&#38; performance.now() &#62; 2500;
        if (cameBack &#124;&#124; arrivedLater) reloadPointCloud();
        lastFrame = frame;
      }
      wasLanding = onLanding;
    });
  }
  window.__hsApplyLanding = applyLanding;

  applyLanding();
  setTimeout(applyLanding, 400);
  window.addEventListener('resize', applyLanding);
  window.addEventListener('popstate', function() {
    setTimeout(applyLanding, 150);
    setTimeout(applyLanding, 600);
  });
  // 브라우저가 저장해둔 페이지로 뒤로 가기 했을 때
  window.addEventListener('pageshow', function(e) {
    if (e.persisted &#38;&#38; landingVisible()) reloadPointCloud();
  });
  new MutationObserver(applyLanding).observe(document.body, { childList: true, subtree: true });

  // ---------- Index 열고 닫기 (열 때와 닫을 때 같은 애니메이션) ----------
  const INDEX_MS = 800;
  let indexTimer = null;

  // 데스크톱 목록과 모바일 목록 중 지금 화면에서 쓰는 쪽
  function activeIndexList() {
    const list = Array.prototype.slice.call(document.querySelectorAll('.landing-index, .landing-index-m'));
    return list.find(function(el) { return window.getComputedStyle(el).display !== 'none'; }) &#124;&#124; null;
  }

  function resetIndexLists() {
    clearTimeout(indexTimer);
    document.querySelectorAll('.landing-index, .landing-index-m').forEach(function(el) {
      el.style.height = '';
      el.style.opacity = '';
    });
  }

  function openIndex(el) {
    clearTimeout(indexTimer);
    el.style.height = el.scrollHeight + 'px';
    el.style.opacity = '1';
    // 다 펼쳐진 뒤에는 높이를 자동으로 (이미지가 늦게 불러와져도 잘리지 않게)
    indexTimer = setTimeout(function() {
      if (document.body.classList.contains('index-open')) el.style.height = 'auto';
    }, INDEX_MS + 50);
    setTimeout(function() {
      el.scrollIntoView({ behavior: 'smooth', block: 'start' });
    }, 250);
  }

  function collapseIndex(el) {
    clearTimeout(indexTimer);
    // 지금 높이에서 0으로 줄어들도록 시작 높이를 숫자로 고정
    el.style.height = el.offsetHeight + 'px';
    void el.offsetHeight;
    el.style.height = '0px';
    el.style.opacity = '0';
  }

  function closeIndex(el, toggle) {
    // 목록 안으로 내려가 있으면 먼저 Index 줄까지 부드럽게 올라간 뒤 접기
    const lineTop = toggle.getBoundingClientRect().top;
    const needScroll = lineTop &#60; 0 &#124;&#124; lineTop &#62; window.innerHeight * 0.8;
    if (needScroll) {
      toggle.scrollIntoView({ behavior: 'smooth', block: 'center' });
      setTimeout(function() { collapseIndex(el); }, 450);
    } else {
      collapseIndex(el);
    }
  }

  document.addEventListener('click', function(e) {
    const t = e.target.closest('.index-toggle');
    if (!t) return;
    e.preventDefault();
    const el = activeIndexList();
    if (!el) return;
    const open = document.body.classList.toggle('index-open');
    if (open) openIndex(el);
    else closeIndex(el, t);
  });

  // 목록이 열린 상태에서 화면 폭이 바뀌어 데스크톱과 모바일 목록이 바뀌면 새 쪽도 열어 둠
  window.addEventListener('resize', function() {
    if (!document.body.classList.contains('index-open')) return;
    const el = activeIndexList();
    if (el &#38;&#38; el.style.height !== 'auto') {
      el.style.height = 'auto';
      el.style.opacity = '1';
    }
  });

  // 링크를 누르면 호버 이미지를 닫고 랜딩 여부를 다시 판단
  document.addEventListener('click', function(e) {
    const link = e.target.closest('a');
    if (!link) return;
    if (hbox) hbox.style.display = 'none';
    setTimeout(applyLanding, 50);
    setTimeout(applyLanding, 400);
    setTimeout(applyLanding, 900);
  });

  // 이미지 호버 프리뷰 (본문 프로젝트명에만 적용, 터치 화면에서는 끔)
  const canHover = !window.matchMedia &#124;&#124; window.matchMedia('(hover: hover)').matches;
  const OX = 20, OY = 20;
  let hbox;
  function ensureBox() {
    if (hbox &#38;&#38; document.body.contains(hbox)) return hbox;
    hbox = document.createElement('div');
    hbox.className = 'img-hover-box';
    hbox.appendChild(document.createElement('img'));
    document.body.appendChild(hbox);
    return hbox;
  }
  function positionBox(e) {
    if (!hbox) return;
    const vw = window.innerWidth, vh = window.innerHeight;
    const w = 340;
    let x = e.clientX + OX;
    let y = e.clientY + OY;
    if (x + w &#62; vw) x = e.clientX - w - OX;
    const h = hbox.offsetHeight &#124;&#124; 220;
    if (y + h &#62; vh) y = e.clientY - h - OY;
    hbox.style.transform = `translate(${x}px,${y}px)`;
  }
  function wireHovers() {
    if (!canHover) return;
    document.querySelectorAll('[data-hover-img]').forEach(function(el) {
      if (el.__wiredHover) return;
      el.addEventListener('mouseenter', function(e) {
        const src = el.getAttribute('data-hover-img');
        if (!src) return;
        ensureBox();
        hbox.querySelector('img').src = src;
        hbox.style.display = 'block';
        positionBox(e);
      });
      el.addEventListener('mousemove', positionBox);
      el.addEventListener('mouseleave', function() {
        if (hbox) hbox.style.display = 'none';
      });
      el.__wiredHover = true;
    });
  }
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', wireHovers);
  } else {
    wireHovers();
  }
  new MutationObserver(wireHovers).observe(document.documentElement, { childList: true, subtree: true });
})();




  

    
      HANJU SEO is a design engineer and sensing systems researcher who builds sensing hardware and the software behind it, for unstructured outdoor environments such as farmland and open worksites. His practice, Reading the Living, starts from learning to read what is living before deciding how to act on it. Founder of EarthCode, a sensing systems research venture based in London.
      서한주는 디자인 엔지니어이자 센싱 시스템 연구자로, 농경지와 야외 작업 현장 등 비정형 환경을 위한 센싱 하드웨어와 소프트웨어를 개발합니다. 그의 디자인 프랙티스인 Reading the Living은 살아 있는 것에 어떻게 개입할지 정하기 전에 그것을 먼저 읽어내는 데서 출발합니다. 런던 기반의 센싱 시스템 연구 벤처 EarthCode의 설립자입니다.
    

    
      A graduate of the joint MA/MSc Innovation Design Engineering programme at Imperial College London and the Royal College of Art. Supported by D&#38;amp;AD, Bentley Motors, Autodesk, Makerversity, and Dubai Future Foundation. Featured in Dezeen, Bentley Magazine, and WIRED Japan.
      임페리얼 칼리지 런던과 영국왕립예술학교가 공동 운영하는 Innovation Design Engineering 석사 과정을 졸업했습니다. D&#38;amp;AD, Bentley Motors, Autodesk, Makerversity, Dubai Future Foundation의 지원을 받아 왔으며 Dezeen, Bentley Magazine, WIRED Japan 등에 소개되었습니다.
    

    
      Sensing and Monitoring: Bark-Code, Counterfield, HOMI, Terrazo, TreeNoc. Spatial and Embodied Interfaces: Being a Giraffe, Tiny Forest, ForestFlux, Mandarin Learning Machine. Material and Speculative Design: NovaHive, BranchLink, Topology Chair.
      센싱과 모니터링: Bark-Code, Counterfield, HOMI, Terrazo, TreeNoc. 공간 및 체화 인터페이스: Being a Giraffe, Tiny Forest, ForestFlux, Mandarin Learning Machine. 재료와 사변적 디자인: NovaHive, BranchLink, Topology Chair.
    

    
      Index전체 작업
    

    
      
        Correspondence연락처
        hanju.seo@network.rca.ac.uk
      
      
        Elsewhere외부 링크
        LinkedIn
      
    

  

  
    
    
  







  
  
    
      &#60;img src="https://freight.cargo.site/t/original/i/5958faac6defdede8df8bf6c5e63900d408daccf370091d5ec460e0f2615deab/bark-code_hero__.jpg" alt="Bark-Code" loading="lazy"&#62;
      
        Bark-Code: Biometric Tree Identification Through LiDAR Bark Morphology Analysis
        Bark-Code: 3D 스캐닝으로 수피 패턴을 읽어 나무 개체를 식별하는 생체인식 시스템
      
      2024 – 2025
    
    
      &#60;img src="https://freight.cargo.site/t/original/i/91e75af6f5484e2d6953db622bbaffea73a4b00a45afebeb0b67251da8f7cfff/counterfield.jpg" alt="Counterfield" loading="lazy"&#62;
      
        Counterfield: Reading, Taking and Making from Living Landscapes
        Counterfield: 살아 있는 환경을 읽고, 가져오고, 만드는 행위
      
      2026 –
    
    
      &#60;img src="https://freight.cargo.site/t/original/i/07d60b5344b507527961af9f32bec5d1d4d0ede06aac5a98d42a615fdb802de3/HOMI_hero_-edit.jpg" alt="HOMI" loading="lazy"&#62;
      
        HOMI: LiDAR-Based Agricultural Worker Activity Dataset
        HOMI: 소규모 농업 현장 작업자 행동 인식을 위한 LiDAR 데이터셋
      
      2026 –
    
  

  

  
  
    
      &#60;img src="https://freight.cargo.site/t/original/i/a486251d62bb93128b307905147753b16a999c8fe44eecef738774dc566a3a6f/Being-a-Giraffe_hero.jpg" alt="Being a Giraffe" loading="lazy"&#62;
      
        Being a Giraffe: Embodied Locomotion Interfaces for Non-Human Morphology in VR
        기린 되기: 비인간 신체로 체화하는 가상현실 인터페이스
      
      2023 – 2024
    
    
      &#60;img src="https://freight.cargo.site/t/original/i/faf063eec95ffc487c999b13b3322202209dd996c5194ea4c3f78acc3324c1cd/TreeNoc_hero__.jpg" alt="TreeNoc" loading="lazy"&#62;
      
        TreeNoc: Acoustic Internal Decay Detection for Standing Trees
        TreeNoc: 나무 속 부패를 음향으로 감지하는 비파괴 시스템
      
      2025
    
    
      &#60;img src="https://freight.cargo.site/t/original/i/191993e4e347897ce8cb17f9785a3173dc3f1368f76681bfadc3e1277513cbd9/Terrazo_hero_.jpg" alt="Terrazo" loading="lazy"&#62;
      
        Terrazo: Sensor Deployment Simulator for Unstructured Outdoor Environments
        Terrazo: 비정형 야외 환경을 위한 센서 배치 시뮬레이터
      
      2025 –
    
  

  

  
  
    
      &#60;img src="https://freight.cargo.site/t/original/i/27cbc273f000fdb7cb1a6724c55604b0587b9be3d1e4683d6a5ae15b7cc4b963/novahive_hero___.jpg" alt="NovaHive" loading="lazy"&#62;
      
        NovaHive: Speculative Hive Design Aligned with Apis Cerana's Natural Nesting Geometry
        NovaHive: 동아시아꿀벌의 자연 서식 구조에 기반한 사변적 벌집 설계
      
      2021
    
    
      &#60;img src="https://freight.cargo.site/t/original/i/0f32d87e0fe000675939832a869ab1b55e7f2e9897df0f185f85d6924cb6802f/tinyforest_hero__.jpg" alt="Tiny Forest" loading="lazy"&#62;
      
        Tiny Forest: Stand-Level Carbon Modelling Through Augmented Reality Simulation
        Tiny Forest: 증강현실로 구현하는 숲 단위 탄소 모델링
      
      2024
    
    
      &#60;img src="https://freight.cargo.site/t/original/i/52d18ba2e29797b21db4e11a8d331e7ef314dd8a76a4c868ec1cd2e67279aa86/branch_link_hero__.jpg" alt="BranchLink" loading="lazy"&#62;
      
        BranchLink: Fabricating Connectors for Discarded Branch Geometries
        BranchLink: 버려진 나뭇가지의 형상에 맞춘 연결재 제작
      
      2022
    
  

  

  
  
    
      &#60;img src="https://freight.cargo.site/t/original/i/755201cc2877fde2e9b8d779d83c9ca4feddfcb955d06bbf51e12ebdc17d8435/MLD.jpg" alt="Mandarin Learning Machine" loading="lazy"&#62;
      
        Mandarin Learning Machine: Interactive System for Mandarin Pronunciation and Character Writing
        Mandarin Learning Machine: 발음과 획순을 연결하는 중국어 학습 인터랙티브 시스템
      
      2022
    
    
      &#60;img src="https://freight.cargo.site/t/original/i/a6de6ca3f4c7383a5a884dd4dd67a30b12e7ca66bf1ac4ad6eb6bf8a731e31ef/forestflux____.jpg" alt="ForestFlux" loading="lazy"&#62;
      
        ForestFlux: XR-Based Field Measurement of Tree Biomass and Carbon Storage
        ForestFlux: 혼합현실(XR)로 나무의 탄소 저장량을 현장에서 측정하기
      
      2024
    
    
      &#60;img src="https://freight.cargo.site/t/original/i/d065e30c1a4956c065c0f3a37865ae2a5a37b5e0d31640d22c4675808cb0847a/art-nouvo-.jpg" alt="Topology Chair" loading="lazy"&#62;
      
        Topology Chair: Merging Computational Efficiency with Human Aesthetic Intent
        Topology Chair: 계산적 효율과 인간의 미적 판단이 만나는 의자 설계
      
      2021
    
  

  

  
  
    
      &#60;img src="https://freight.cargo.site/t/original/i/c942e24821cd318884c9655cb2ae6fc67b6f6e95e2021eed576664eefbaa4488/Pera_hero__.jpg" alt="PERA" loading="lazy"&#62;
      
        PERA: Wearable Recording and Machine-Learning Analysis of Intestinal Activity
        PERA: 장 음향 신호를 분석하는 웨어러블 헬스케어 디바이스
      
      2023 – 2024
    
  







  Bark-Code2024 – 2025
  Counterfield2026 –
  HOMI2026 –
  Being a Giraffe2023 – 2024
  TreeNoc2025
  Terrazo2025 –
  NovaHive2021
  Tiny Forest2024
  BranchLink2022
  Mandarin Learning Machine2022
  ForestFlux2024
  Topology Chair2021
  PERA2023 – 2024

</description>
		
	</item>
		
	</channel>
</rss>