DEV Community

Cover image for # ๐ŸŒฑ GrowWise: An AI Garden Coach That Wants You to Close This Tab and Touch Some Actual Grass
Ashish
Ashish

Posted on

# ๐ŸŒฑ GrowWise: An AI Garden Coach That Wants You to Close This Tab and Touch Some Actual Grass

ํ™”๋ฉด ๋„๋ผ๋Š” AI, ํ™”๋ฉด ์ผœ์„œ ๋ˆˆ ๊ณ ์น˜๋Š” VR โ€” GrowWise์™€ AmblyoPunch๊ฐ€ ๋งŒ๋‚œ ์ง€์  Hacktoberfest 'Touch Grass' ์ฑŒ๋ฆฐ์ง€

์ง€๋‚œ์ฃผ ๊ธˆ์š”์ผ ๋ฐค, GitHub ์•Œ๋ฆผ์ฐฝ์ด ์šธ๋ ธ๋‹ค. Hacktoberfest 'Touch Grass' ์ฑŒ๋ฆฐ์ง€ ์ด์Šˆ๊ฐ€ ์˜ฌ๋ผ์˜จ ๊ฒƒ์ด๋‹ค. "ํ™”๋ฉด์—์„œ ๋ฒ—์–ด๋‚˜ ๋ฐ”๊นฅ ๊ณต๊ธฐ ๋งˆ์‹œ๊ธฐ"๋ผ๋Š” ์ทจ์ง€. ์•„์ด๋Ÿฌ๋‹ˆํ•˜๊ฒŒ๋„ ๋‚ด ๋ชจ๋‹ˆํ„ฐ ์•ž์—๋Š” Unity ์—๋””ํ„ฐ๊ฐ€ ์—ด๋ ค ์žˆ์—ˆ๊ณ , HMD ๋ Œ์ฆˆ ๋„ˆ๋จธ๋กœ ์•„์ด์˜ ์•ฝ์‹œ ์น˜๋ฃŒ์šฉ ์ฝ˜ํ…์ธ ๊ฐ€ ๋Œ์•„๊ฐ€๊ณ  ์žˆ์—ˆ๋‹ค. ํ™”๋ฉด ๋„๋ผ๋Š” ์šด๋™ ํ•œ๋ณตํŒ์—์„œ, ํ™”๋ฉด ์ผœ์„œ ๋ˆˆ์„ ๊ณ ์น˜๋Š” ์ฝ”๋“œ๋ฅผ ์งœ๊ณ  ์žˆ๋Š” ๋‚˜. ๊ทธ ๋ชจ์ˆœ์ด ์ •ํ™•ํžˆ GrowWise์™€ AmblyoPunch๊ฐ€ ๋งŒ๋‚˜๋Š” ์ง€์ ์ด์—ˆ๋‹ค.

์•ฝ์‹œ ์น˜๋ฃŒ, ์™œ VR์ธ๊ฐ€

์•ฝ์‹œ(amblyopia)๋Š” ๋‡Œ๊ฐ€ ํ•œ์ชฝ ๋ˆˆ์˜ ์ž…๋ ฅ์„ ์–ต์ œํ•˜๋ฉด์„œ ์ƒ๊ธด๋‹ค. ๊ธฐ์กด ์น˜๋ฃŒ๋Š” ์•ˆ๋Œ€ ํŒจ์นญ(patching) โ€” ๊ฐ•ํ•œ ๋ˆˆ ๊ฐ€๋ฆฌ๊ณ  ์•ฝํ•œ ๋ˆˆ๋งŒ ์“ฐ๊ฒŒ ํ•˜๊ธฐ. ์•„์ด๋“ค์€ ์‹ซ์–ดํ•œ๋‹ค. ์‹œ์•ผ๊ฐ€ ์ข์•„์ง€๊ณ , ์ž…์ฒด์‹œ(stereopsis) ๋ฐœ๋‹ฌ์—” ๋„์›€ ์•ˆ ๋œ๋‹ค. ์ˆœ์‘๋„(compliance) ๋–จ์–ด์ง€๋ฉด ํšจ๊ณผ๋„ ์—†๋‹ค.

AmblyoPunch๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ์„ ํƒํ–ˆ๋‹ค. ์ด์•ˆ์‹œ(dichoptic) ์ž๊ทน: ์–‘ ๋ˆˆ์— ์„œ๋กœ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€ ๋ณด์—ฌ์ฃผ๋˜, ์•ฝํ•œ ๋ˆˆ์—๋งŒ ์ค‘์š”ํ•œ ์ •๋ณด(ํƒ€๊ฒŸ, ๋ณด์ƒ ์ž๊ทน) ๋„ฃ๊ธฐ. ๊ฐ•ํ•œ ๋ˆˆ์—” ๋ฐฐ๊ฒฝ๋งŒ. ๋‡Œ๊ฐ€ "์–ด? ์•ฝํ•œ ๋ˆˆ ์ •๋ณด ํ•„์š”ํ•˜๋„ค" ํ•˜๊ณ  ํ†ตํ•ฉํ•˜๋„๋ก ์œ ๋„. ์ด๊ฑธ VR HMD๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ๊ฐ ๋ˆˆ ํ•ด์ƒ๋„ยท๋ฐ๊ธฐยท๋Œ€๋น„ ๊ฐœ๋ณ„ ์ œ์–ด ๊ฐ€๋Šฅ. ์•ˆ๊ฒฝํ˜• AR๋ณด๋‹ค ๊ด‘ํ•™ ์™œ๊ณก ์ ๊ณ , ์•„์ด๋“ค ๋ชฐ์ž…๋„ ๋†’๋‹ค.

๊ธฐ์ˆ  ์Šคํƒ: Unity 2022 LTS + OpenXR. Meta Quest 2/3, Pico 4 ํƒ€๊ฒŸ. ์…ฐ์ด๋”์—์„œ ์ขŒ์šฐ ๋ˆˆ ๋ Œ๋” ํƒ€๊ฒŸ ๋ถ„๋ฆฌ(Graphics.SetRenderTarget + singlePassStereoRendering false). ํฌ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค์—์„œ ๊ฐ ๋ˆˆ๋ณ„ ๊ฐ๋งˆยท๋Œ€๋น„ยท์ฑ„๋„ ์ปค๋ธŒ ์ ์šฉ. ํ”„๋ ˆ์ž„ ๋“œ๋กญ 1ms๋ผ๋„ ์ƒ๊ธฐ๋ฉด ๋ฉ€๋ฏธ ์œ ๋ฐœ โ€” FixedUpdate ๋ฃจํ”„์—์„œ ์‹œ์„  ์ถ”์ (eye tracking) ๋ฐ์ดํ„ฐ ์ฝ์–ด ์‹ค์‹œ๊ฐ„ ํฌ๋น„์—์ดํ‹ฐ๋“œ ๋ Œ๋”๋ง(foveated rendering) ์ผœ๊ณ  ๋ˆ๋‹ค. Quest 2 ๊ธฐ์ค€ 72Hz ๊ณ ์ •, GPU 12ms ์˜ˆ์‚ฐ.

GrowWise: ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ, ์•„๋‹Œ '์„ฑ์žฅ ๊ธฐ๋ก'

AmblyoPunch๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ผ๋ฉด GrowWise๋Š” ๋ฐฑ์—”๋“œ. ์น˜๋ฃŒ ์„ธ์…˜ ๋กœ๊ทธ ์ˆ˜์ง‘ โ†’ ์ง‘๊ณ„ โ†’ ๋ณดํ˜ธ์žยท์˜๋ฃŒ์ง„ ๋Œ€์‹œ๋ณด๋“œ. ๋‹จ์ˆœ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ ์•„๋‹ˆ๋‹ค. '์„ฑ์žฅ ๊ธฐ๋ก'์œผ๋กœ ํ”„๋ ˆ์ž„ ์žก์•˜๋‹ค.

๋ฐ์ดํ„ฐ ํ๋ฆ„: HMD ๋กœ์ปฌ SQLite(์˜คํ”„๋ผ์ธ ์šฐ์„ ) โ†’ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋™๊ธฐํ™”(Exponential backoff, max 24h) โ†’ Firebase Firestore. ๋ฌธ์„œ ๊ตฌ์กฐ:

{
  "sessionId": "uuid",
  "childId": "hashed",
  "date": "2024-10-15T19:30:00Z",
  "durationSec": 1800,
  "dichopticConfig": { "contrastRatio": 0.3, "targetFreq": 2.5 },
  "gazeHeatmap": "base64_compressed",
  "complianceScore": 0.92,
  "visualAcuityEstimate": { "logMAR": 0.4, "confidence": 0.78 }
}
๐Ÿ”ด Live TV: ashish cd/ growwise an ai garden coach that wants you to close this tab and touch some actual grass lfj - Pertandingan Hari Ini ๐Ÿ”ด Live TV: ashish cd/ growwise an ai garden coach that wants you to close this tab and touch some actual grass lfj - Pertandingan Hari Ini

gazeHeatmap์€ 1์ดˆ๋‹น 1์ƒ˜ํ”Œ, 30๋ถ„ ์„ธ์…˜์ด๋ฉด 1800ํฌ์ธํŠธ. ์••์ถ• ํ›„ 40KB ์ˆ˜์ค€. Firestore ๋ฌธ์„œ ํฌ๊ธฐ 1MB ์ œํ•œ ์—ฌ์œ  ์žˆ๊ฒŒ ๋งž์ถ˜๋‹ค.

์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์€ Cloud Functions (Node 20) + BigQuery. ์ผ๋ณ„ยท์ฃผ๋ณ„ยท์›”๋ณ„ ์ปดํ”Œ๋ผ์ด์–ธ์Šค ํŠธ๋ Œ๋“œ, ์‹œ๋ ฅ ์ถ”์ •์น˜ ํšŒ๊ท€์„ , ์ž๊ทน ํŒŒ๋ผ๋ฏธํ„ฐ๋ณ„ ํšจ๊ณผ ํฌ๊ธฐ(effect size) ์‚ฐ์ถœ. ๋ณดํ˜ธ์ž ์•ฑ(React Native Expo)์—์„  "์ด๋ฒˆ ์ฃผ 4์ผ, ํ•˜๋ฃจ 25๋ถ„ ํ‰๊ท " ๊ฐ™์€ ๋ฌธ์žฅ์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค. ์ˆซ์ž ์•„๋‹Œ '์ด์•ผ๊ธฐ'๋กœ.

ํ•ด์ปคํ†ค ์ด์Šˆ์—์„œ ๋งŒ๋‚œ ์ œ์•ฝ๋“ค

Hacktoberfest ์ด์Šˆ ํ…œํ”Œ๋ฆฟ์—” "Touch Grass: ์•ผ์™ธ ํ™œ๋™ ์‚ฌ์ง„ ์˜ฌ๋ฆฌ๊ธฐ"๋ผ ์ ํ˜€ ์žˆ์—ˆ๋‹ค. ๋‚ด PR ์ œ๋ชฉ: feat: add outdoor-mode ambient-light-compensation. ๋‚ด์šฉ: ์‹ค์™ธ์—์„œ HMD ์“ธ ๋•Œ ์ฃผ๋ณ€๊ด‘ ๊ฐ•ํ•ด์ง€๋ฉด ๋Œ€๋น„๋น„(contrast ratio) ์ž๋™ ๋ณด์ •. AmbientLightSensor API(์›น) ํ˜น์€ Android SensorManager.TYPE_LIGHT ์ฝ์–ด ์…ฐ์ด๋” ์œ ๋‹ˆํผ u_AmbientLux๋กœ ๋„˜๊ธด๋‹ค. 10,000 lux ์ด์ƒ์ด๋ฉด contrastRatio *= 1.3. ์‹ค๋‚ด 300 lux ๊ธฐ์ค€ ๋Œ€๋น„.

๋ฆฌ๋ทฐ์–ด ์ฝ”๋ฉ˜ํŠธ: "์ด๊ฒŒ ์ง„์งœ Touch Grass๋„ค. ๊ทผ๋ฐ ๋ฐฐํ„ฐ๋ฆฌ 20% ๋” ๋จน๋Š”๋ฐ?" ํ”„๋กœํŒŒ์ผ๋ง ํ•ด๋ณด๋‹ˆ ์„ผ์„œ ํด๋ง 10Hz โ†’ 1Hz๋กœ ์ค„์ด๊ณ , ๋ณด์ • ์—ฐ์‚ฐ์€ ํ”„๋ ˆ์ž„ ์ฒซ 0.2ms๋งŒ. ๋ฐฐํ„ฐ๋ฆฌ ์˜ํ–ฅ 3% ์ด๋‚ด๋กœ ์žก์•˜๋‹ค. adb shell dumpsys batterystats ๋กœ ํ™•์ธ.

๋˜ ๋‹ค๋ฅธ ์ด์Šˆ: "์•„์ด๋“ค HMD ๋ฒ—์„ ๋•Œ ๋จธ๋ฆฌ์นด๋ฝ ์—‰ํ‚ค์ง€ ์•Š๊ฒŒ ์ŠคํŠธ๋žฉ ๊ฐœ์„ ". ์ด๊ฑด ํ•˜๋“œ์›จ์–ด์ง€๋งŒ, ์†Œํ”„ํŠธ์›จ์–ด๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„ โ€” ์„ธ์…˜ ์ข…๋ฃŒ 30์ดˆ ์ „๋ถ€ํ„ฐ ํŽ˜์ด๋“œ์•„์›ƒํ•˜๋ฉด์„œ "์ž ์‹œ๋งŒ์š”, ์ŠคํŠธ๋žฉ ํ’€๊ณ  ๋ฒ—์œผ์„ธ์š”" ์Œ์„ฑ ์•ˆ๋‚ด(ํ•œ๊ตญ์–ด/์˜์–ด/์ผ๋ณธ์–ด TTS). AudioSource.PlayScheduled๋กœ ํƒ€์ด๋ฐ ๋งž์ถค. ์ž‘์€ UX์ง€๋งŒ ๋ณดํ˜ธ์ž ๋ฆฌ๋ทฐ์—์„œ "์ด๊ฑฐ ์ง„์งœ ์„ธ์‹ฌํ•˜๋„ค์š”" ๋Œ“๊ธ€ ๋‹ฌ๋ ธ๋‹ค.

๋‚ด ์•„์ด, ๋‚ด ์ฝ”๋“œ, ๋‚ด ๋ฐค

๋ฏผ์ค€์ด(๊ฐ€๋ช…), ์—ฌ์„ฏ ์‚ด. ์˜ค๋ฅธ์ชฝ ๋ˆˆ logMAR 0.6. ์•ˆ๋Œ€ ํ•˜๋ฃจ ๋‘ ์‹œ๊ฐ„, ์šธ๋ฉด์„œ ๋ฒ—์œผ๋ ค ํ•œ๋‹ค. ์ž‘๋…„ 11์›”, AmblyoPunch ๋ฒ ํƒ€ ๋นŒ๋“œ ๋ฐ›์•„์™”๋‹ค. ์ฒซ๋‚  8๋ถ„. ๋‘˜์งธ ๋‚  12๋ถ„. ์ผ์ฃผ์ผ ๋’ค 25๋ถ„ ์ฑ„์› ๋‹ค. "์•„๋น , ์ด๊ฑฐ ๊ฒŒ์ž„์ด์•ผ? ๋ˆˆ ์šด๋™์ด์•ผ?" ๋ฌป๊ธธ๋ž˜ "๋‘˜ ๋‹ค"๋ผ๊ณ  ๋‹ตํ–ˆ๋‹ค.

GrowWise ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ปดํ”Œ๋ผ์ด์–ธ์Šค 0.87 ์ฐํžŒ ๋‚ , ๋‚˜๋„ ๋ชจ๋ฅด๊ฒŒ ์Šคํฌ๋ฆฐ์ƒท ์ฐ์–ด ์•„๋‚ดํ•œํ…Œ ๋ณด๋ƒˆ๋‹ค. ์•„๋‚ด๋Š” "๊ณ ์ƒํ–ˆ์–ด" ํ•œ ๋งˆ๋””. ๊ทธ ๋’ค์— ์˜ค๋Š” ์นจ๋ฌต์ด ๋” ๋ฌด๊ฒ๋‹ค. ๊ฐœ๋ฐœ์ž๋กœ์„œ ๋‚ด ์ฝ”๋“œ๊ฐ€ ์•„์ด ๋ˆˆ ์†์— ๋“ค์–ด๊ฐ„๋‹ค๋Š” ๊ฑด, ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ํ†ต๊ณผ ๋ฉ”ํŠธ๋ฆญ๊ณผ๋Š” ๋‹ค๋ฅธ ๋ฌด๊ฒŒ๋‹ค.

๋ฐค 11์‹œ, git push origin main ํ•˜๊ณ  CI ๊ทธ๋ฆฐ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ์ƒ๊ฐํ•œ๋‹ค. Hacktoberfest 'Touch Grass' ์ฑŒ๋ฆฐ์ง€๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ "ํ™”๋ฉด ๋ฒ—์–ด๋‚˜๋ผ"๊ณ  ๋งํ•œ๋‹ค. ๋งž๋‹ค. ์šฐ๋ฆฌ๋„ ๊ทธ๋ž˜์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋–ค ํ™”๋ฉด์€ ์ผœ์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์•„์ด์˜ ์•ฝํ•œ ๋ˆˆ์ด ์„ธ์ƒ์„ ๋‹ค์‹œ ๋ฐฐ์šฐ๋Š” ๋™์•ˆ, ๊ทธ ํ™”๋ฉด์€ ์น˜๋ฃŒ ๋„๊ตฌ๋‹ค. GrowWise๊ฐ€ ๊ธฐ๋กํ•˜๋Š” ๊ฑด ํ™”๋ฉด ์‹œ๊ฐ„์ด ์•„๋‹ˆ๋ผ 'ํšŒ๋ณต ์‹œ๊ฐ„'์ด๋‹ค.

๊ธฐ์ˆ ์  ๋ถ€์ฑ„, ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์Šคํ”„๋ฆฐํŠธ

ํ˜„์žฌ ์•Œ๋ ค์ง„ ์ด์Šˆ:

  • Quest 2 ๋‹จ์•ˆ ํ•ด์ƒ๋„ 1832ร—1920, ํฌ๋น„์—์ดํ‹ฐ๋“œ ๋ Œ๋”๋ง ๋ฏธ์ง€์› โ†’ ์ฃผ๋ณ€๋ถ€ ํ™”์งˆ ์ €ํ•˜. Quest 3 ์—…๊ทธ๋ ˆ์ด๋“œ ๊ถŒ์žฅ.
  • ์‹œ์„  ์ถ”์  ์บ˜๋ฆฌ๋ธŒ๋ ˆ์ด์…˜ 5ํฌ์ธํŠธ, ์•„์ด๋“ค ์ง‘์ค‘๋ ฅ ์งง์•„ ์‹คํŒจ์œจ 15%. 3ํฌ์ธํŠธ ๊ฐ„์†Œํ™” ๋ธŒ๋žœ์น˜ ์‹คํ—˜ ์ค‘.
  • Firestore ์‹ค์‹œ๊ฐ„ ๋ฆฌ์Šค๋„ˆ ๊ณผ๊ธˆ ํญ์ฆ ๋ฐฉ์ง€ โ†’ onSnapshot ๋Œ€์‹  5๋ถ„ ํด๋ง + ๋กœ์ปฌ ์บ์‹œ ์ „๋žต์œผ๋กœ ์ „ํ™˜ ์˜ˆ์ •.
  • ๋‹ค๊ตญ์–ด TTS ์Œ์„ฑ ํ•ฉ์„ฑ ํ’ˆ์งˆ ๋ถˆ๊ท ํ˜•. ํ•œ๊ตญ์–ด ko-KR-Standard-C ์ž์—ฐ์Šค๋Ÿฌ์šด๋ฐ ์ผ๋ณธ์–ด ja-JP-Standard-B ๋กœ๋ด‡ ํ†ค. SSML <prosody> ํŠœ๋‹ ํ•„์š”.

๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๋…์ž๋ผ๋ฉด ์•Œ ๊ฒƒ์ด๋‹ค. ์ด ์ •๋„ ๋ถ€์ฑ„๋Š” '์ถœ์‹œ ํ›„ ๊ฐœ์„ ' ํด๋”์— ๋“ค์–ด๊ฐ„๋‹ค. ์ค‘์š”ํ•œ ๊ฑด ์•„์ด๋“ค์ด ์˜ค๋Š˜๋„ ํ—ค๋“œ์…‹ ์“ฐ๊ณ  25๋ถ„ ๋ฒ„ํ…ผ๋‹ค๋Š” ์‚ฌ์‹ค. ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ GrowWise์— ์Œ“์ด๊ณ , ๋‹ค์Œ ์ฃผ ์˜์‚ฌ๊ฐ€ "์˜ค๋ฅธ์ชฝ ๋ˆˆ 0.1 ์ข‹์•„์กŒ๋„ค์š”" ๋งํ•  ๋•Œ, ๋‚ด ์ปค๋ฐ‹ ๋กœ๊ทธ ํ•œ ์ค„์ด ๊ทธ ๋ฌธ์žฅ ์†์— ์ˆจ์–ด ์žˆ๋‹ค.

ํ™”๋ฉด, ๋„๊ณ  ์ผœ๊ณ  ์‚ฌ์ด์˜ ๊ท ํ˜•

Hacktoberfest ๋ฐฐ์ง€ ํ•˜๋‚˜ ๋ฐ›์•˜๋‹ค. 'Touch Grass' ๋ผ๋ฒจ ๋‹ฌ๋ฆฐ PR ๋จธ์ง€. ์ž”๋””๋ฐญ ์‚ฌ์ง„ ๋Œ€์‹  HMD ์“ด ์•„์ด ๋’ท๋ชจ์Šต ์˜ฌ๋ ธ๋‹ค. ์บก์…˜: "ํ™”๋ฉด ๋„๋ผ๋Š” ์ฑŒ๋ฆฐ์ง€์—์„œ, ํ™”๋ฉด ์ผœ์„œ ๋ˆˆ ๊ณ ์น˜๋Š” ์ฝ”๋“œ ์งœ๊ธฐ. ๋‘˜ ๋‹ค ํ•„์š”ํ•˜๋‹ค."

๋Œ“๊ธ€ ํ•˜๋‚˜ ๋‹ฌ๋ ธ๋‹ค. "์ด๊ฒŒ ์ง„์งœ ํ•ด์ปค ์ •์‹ ์ด๋„ค. ํ’€๋ฆฌํ€˜ ๋ณด๋‚ด์ค˜์„œ ๊ณ ๋งˆ์›Œ."

๊ทธ๋‚  ๋ฐค, ๋ฏผ์ค€์ด ์žฌ์šฐ๊ณ  ๋ชจ๋‹ˆํ„ฐ ๋ˆ๋‹ค. ๋ฐฉ ์•ˆ ์–ด๋‘์›Œ์ง„๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ˆˆ ๊ฐ์•„๋„ ์ฝ”๋“œ ์กฐ๊ฐ๋“ค์ด ๋– ๋‹ค๋‹Œ๋‹ค. u_AmbientLux, contrastRatio, complianceScore. ๊ทธ ๋ณ€์ˆ˜๋“ค ์†์— ์•„์ด์˜ ๋‚ด์ผ์ด ์žˆ๋‹ค. ํ™”๋ฉด ๋„๋Š” ๋ฐค์—๋„, ์–ด๋–ค ํ™”๋ฉด์€ ๋งˆ์Œ์†์—์„œ ๊ณ„์† ๋Œ์•„๊ฐ„๋‹ค. ๊ทธ๊ฒŒ ๋‚ด๊ฐ€ ์“ฐ๋Š” ์ฝ”๋“œ์˜ ์˜๋ฏธ๋‹ค.


๋‹ค์Œ ์Šคํ”„๋ฆฐํŠธ์—” ์‹ค์™ธ ๋ชจ๋“œ ๋ฐฐํ„ฐ๋ฆฌ ์ตœ์ ํ™” ๋” ํŒŒ๊ณ ๋“ค ์˜ˆ์ •. SensorManager ์›จ์ดํฌ๋ฝ ์ตœ์†Œํ™”, JobScheduler๋กœ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ. ํ˜น์‹œ ๋น„์Šทํ•œ ๋ฌธ์ œ ํ’€๊ณ  ๊ณ„์‹  ๋ถ„, ์ด์ŠˆยทPR ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์•„์ด๋“ค ๋ˆˆ ๊ฑด๊ฐ• ์ง€ํ‚ค๋Š” ์ฝ”๋“œ, ํ•จ๊ป˜ ์งœ์š”.

https://growwise.io/amblyopunch

Top comments (0)