Internship인턴십Team of 22인 팀Embedded / IoT임베디드 / IoTESP322022
Built as an IoT Engineer Intern at DoctorTool (PT Medifa Infoyasa
Suryantara).DoctorTool(PT Medifa Infoyasa Suryantara)에서 IoT 엔지니어 인턴으로
개발했습니다.
Developed an ESP32-based IoT gateway bridging medical instruments to
the cloud.의료 기기를 클라우드에 연결하는 ESP32 기반 IoT 게이트웨이를 개발했습니다.
Connects thermometers, oximeters, and biometric sensors.체온계, 산소포화도 측정기, 생체 신호 센서를 연결합니다.
Supports over six device categories.여섯 가지가 넘는 기기 유형을 지원합니다.
Built as a team of 2 people.2인 팀으로 진행했습니다.
6-DOF Robot Manipulator Simulation (OpenGL)6자유도 로봇 매니퓰레이터 시뮬레이션 (OpenGL)
Robotics course project로보틱스 수업 프로젝트Robot kinematics로봇 기구학C / OpenGLUniversitas Indonesia인도네시아대학교May 20232023년 5월
Built as a project for a robotics course at Universitas
Indonesia.인도네시아대학교 로보틱스 수업의 프로젝트로 만들었습니다.
Real-time 3D visualization of a 6-DOF robot arm, built in C with OpenGL
(GLUT).C와 OpenGL(GLUT)로 6자유도 로봇 팔을 실시간 3D로 시각화합니다.
Implements forward kinematics and Jacobian pseudoinverse-based inverse
kinematics for end-effector position control.엔드 이펙터의 위치 제어를 위해 순기구학과 자코비안 유사역행렬 기반 역기구학을 구현했습니다.
Generates linear point-to-point trajectories between commanded
poses.지정한 자세 사이를 잇는 직선 점대점 궤적을 생성합니다.
Streams joint commands to the simulated robot over serial
communication.시리얼 통신으로 시뮬레이션 로봇에 관절 명령을 전송합니다.
Built a computer-vision system for corrosion detection.부식을 탐지하는 컴퓨터 비전 시스템을 만들었습니다.
Shipped the Android app with Flutter (also runs on Windows and
Linux).Flutter로 안드로이드 앱을 출시했으며, 윈도우와 리눅스에서도 동작합니다.
Delivered within a one-month timeframe.한 달 안에 완성했습니다.
Won 1st place at SciHackfest 2023 (a hackathon held by PT Sucofindo) —
prize of 25 million IDR (~1,600 USD), as a team of 3.PT Sucofindo가 주최한 SciHackfest 2023에서 3인 팀으로 1위를 차지해 상금 2,500만
IDR(약 1,600달러)를 받았습니다.
App demo앱 시연1st place at SciHackfest 2023SciHackfest 2023 1위 수상
Apps앱
CanopyDiary
Web app웹 앱Android안드로이드Vanilla JS바닐라 JSSupabasePWA
Purpose: a private, local-first diary for dated
notes, with a photo gallery kept separate from the writing.목적: 날짜별로 기록을 남기는 로컬 우선 일기 앱으로, 사진은 글과 분리된
갤러리에 모입니다.
Available on: web and Android, both syncing to the
same account.지원 플랫폼: 웹과 안드로이드, 같은 계정으로 동기화됩니다.
Built with: vanilla JavaScript, HTML, and CSS on the
web, a native Kotlin client on Android, and Supabase + Google sign-in for the optional
cloud sync behind both. Autosave and PDF export for a date range on either.기술: 웹은 바닐라 JavaScript·HTML·CSS로, 안드로이드는 네이티브
Kotlin으로 만들었고, 둘 다 Supabase와 구글 로그인으로 선택적 클라우드 동기화를 지원합니다. 자동 저장과 기간별 PDF 내보내기는
양쪽 모두에 있습니다.
Web app웹 앱Android안드로이드Vanilla JS바닐라 JSFirebaseOffline-first오프라인 우선
Purpose: a fast, private place to keep favourite
quotes alongside your own thoughts, each dated, sourced, and tagged.목적: 좋아하는 인용구와 생각을 담아 두는 빠르고 사적인 공간으로, 각
기록에 날짜와 출처, 태그가 붙습니다.
Available on: web and Android; both open with no
login and work fully offline.지원 플랫폼: 웹과 안드로이드, 둘 다 로그인 없이 열리고 오프라인에서도
완전히 동작합니다.
Built with: a framework-free JavaScript web app and
a Kotlin + Compose Android client, both reading the same Firestore database once you sign
in with Google. PDF export backs up the whole collection either way.기술: 프레임워크 없는 JavaScript 웹 앱과 Kotlin·Compose
안드로이드 클라이언트로 만들었고, 구글 로그인 시 같은 Firestore 데이터베이스를 사용합니다. 양쪽 모두 PDF로 전체 기록을 백업할 수
있습니다.
Purpose: a water-fasting tracker that names each
metabolic stage as it passes — insulin falling, glycogen emptying, ketosis, autophagy.목적: 인슐린 감소, 글리코겐 고갈, 케토시스, 자가포식처럼 지나가는 대사
단계를 알려 주는 물 단식 기록 앱입니다.
Available on: an installable web app (PWA) and
Android, syncing fasts between devices in real time.지원 플랫폼: 설치형 웹 앱(PWA)과 안드로이드로, 단식 기록이 기기 사이에서
실시간으로 동기화됩니다.
Built with: ~40 KB of framework-free HTML/CSS/JS on
the web, with a lite mode for slow connections and weak hardware; a Kotlin + Compose Android
app adds a live lock-screen timer that survives Doze and reboots. Firebase syncs both.기술: 웹은 프레임워크 없는 HTML/CSS/JS 약 40 KB로, 느린 연결과
저사양 기기에서는 라이트 모드가 자동으로 켜집니다. 안드로이드는 Kotlin·Compose로 만들었고 Doze 모드와 재부팅 후에도 유지되는
잠금화면 타이머가 있습니다. 동기화는 양쪽 다 Firebase로 이루어집니다.
Purpose: a minimalist focus timer that grows a
plant through each session, adding one tree to a weekly forest when it finishes.목적: 세션 동안 식물이 자라고, 끝날 때마다 주간 숲에 나무가 한 그루씩
늘어나는 미니멀한 집중 타이머입니다.
Available on: web and Android, with sessions and
the running timer following you between them.지원 플랫폼: 웹과 안드로이드, 세션과 진행 중인 타이머가 두 기기에서
그대로 이어집니다.
Built with: a framework-free JavaScript web app
and a Kotlin port on Android, both working with no account on local storage alone; optional
Supabase + Google sign-in syncs history with row-level security.기술: 프레임워크 없는 JavaScript 웹 앱과 Kotlin 안드로이드
포트로 만들었고, 계정 없이 로컬 저장소만으로 동작합니다. Supabase와 구글 로그인을 선택하면 행 수준 보안으로 기록이 동기화됩니다.
Purpose: a habit tracker with a today checklist
and a day-by-day grid, for yes/no habits or measurable goals with a target and a unit.목적: 오늘 체크리스트와 날짜별 격자로 습관을 기록하는 앱으로, 예/아니오
습관은 물론 목표치와 단위를 가진 습관도 지원합니다.
Available on: web and Android; usable with no
account at all, or with Google sign-in for real-time sync.지원 플랫폼: 웹과 안드로이드, 계정 없이도 쓸 수 있고 구글 로그인을 하면
실시간으로 동기화됩니다.
Built with: a framework-free JavaScript web app on
Firebase; a Kotlin + Compose Android client reads the same Firestore database and adds a
home-screen widget. Streaks, 30-day completion rates, and a heatmap calendar on both.기술: 프레임워크 없는 JavaScript 웹 앱을 Firebase로 만들었고,
Kotlin·Compose 안드로이드 클라이언트가 같은 Firestore 데이터베이스를 사용하며 홈 화면 위젯을 제공합니다. 연속 기록과 30일
달성률, 히트맵 달력은 양쪽 모두에 있습니다.
Buzzes the wrist once every minute, on the minute, and does nothing
else — it runs in the background and never takes audio focus.매분 정각에 손목을 한 번 울려줄 뿐, 다른 일은 하지 않습니다. 백그라운드에서 동작하며 오디오 포커스를 가져가지
않습니다.
Vibration, a beep, or both — five strengths and single, double, triple
or long patterns, each configured on its own.진동과 알림음을 따로 또는 함께 쓸 수 있고, 세기 5단계와 단발·2회·3회·길게 패턴을 각각 설정할 수
있습니다.
Quiet hours stay armed without alerting, and it restarts itself after
a reboot.방해 금지 시간에는 알리지 않은 채 대기하고, 재부팅 후에도 스스로 다시 시작합니다.
Built for my Galaxy Watch 7 on Wear OS 5, and installed over ADB from
the source.Wear OS 5를 쓰는 제 갤럭시 워치 7을 위해 만들었고, 소스에서 빌드해 ADB로 설치합니다.