GithubHelp home page GithubHelp logo

ios-diary's Introduction

๐Ÿ“” ์ผ๊ธฐ์žฅ ๐Ÿ“”


๐Ÿ“œ ๋ชฉ์ฐจ

  1. ์†Œ๊ฐœ
  2. ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  3. ํŒ€์›
  4. ํƒ€์ž„๋ผ์ธ
  5. UML
  6. ์‹คํ–‰ํ™”๋ฉด
  7. ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๋ฐ ๊ณ ๋ฏผ
  8. ํ”„๋กœ์ ํŠธ ์ˆ˜ํ–‰ ์ค‘ ํ•ต์‹ฌ ๊ฒฝํ—˜
  9. ์ฐธ๊ณ ๋งํฌ

๐Ÿ—ฃ ์†Œ๊ฐœ

Ayaan๐Ÿฆ–, zhilly๐Ÿ”ฅ ์ด ๋งŒ๋“  Core Data๋ฅผ ํ™œ์šฉํ•œ ์ผ๊ธฐ์žฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ : 2022-12-19 ~ 2023-01-06


๐Ÿ’ป ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

iOS swift


๐Ÿง‘ ํŒ€์›

Ayaan zhilly

๐Ÿ•– ํƒ€์ž„๋ผ์ธ

STEP 1 - [22.12.19 ~ 22.12.23]

  • 22.12.20
    • SwiftLint ์ ์šฉ
    • DiaryTableView Type ๊ตฌํ˜„
    • DiaryCell Type ๊ตฌํ˜„
  • 22.12.21
    • DiaryView Type ๊ตฌํ˜„
    • DiaryListViewController Type ๊ตฌํ˜„
    • DiaryViewController Type ๊ตฌํ˜„
    • Keyboard ๊ด€๋ จ ๊ธฐ๋Šฅ๊ตฌํ˜„
    • DiaryTextView์˜ PlaceHolder ๊ธฐ๋Šฅ๊ตฌํ˜„
  • 22.12.22
    • ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง
    • ๋งค์ง ๋ฆฌํ„ฐ๋Ÿด ์ œ๊ฑฐ

STEP 2 - [22.12.26 ~ 23.01.02]

  • 22.12.26
    • CoreData์— DiaryData Entity ๊ตฌํ˜„
    • DiaryManageable Protocol ๊ตฌํ˜„
    • DiaryDataManager Type ๊ตฌํ˜„
    • Diary Type ์žฌ์ •์˜
    • DiaryCoreDataStack Type ๊ตฌํ˜„
  • 22.12.27
    • DiaryViewController ๋ฆฌํŒฉํ† ๋ง
    • ํ‚ค๋ณด๋“œ๊ด€๋ จ ๊ธฐ๋Šฅ๊ตฌํ˜„
    • ObjectID๋ฅผ ํ™œ์šฉํ•˜์—ฌ CoreData๋ฅผ ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„
  • 22.12.28
    • Diary ์ƒ์„ธ ํ™”๋ฉด์— ๋”๋ณด๊ธฐ ๋ฒ„ํŠผ ๊ธฐ๋Šฅ(๊ณต์œ , ์‚ญ์ œ) ๊ตฌํ˜„
    • CoreData์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€์ฐฐํ•˜๋Š” NotificationCenter ๊ตฌํ˜„
    • Cell์˜ Swipe ๊ธฐ๋Šฅ ๊ตฌํ˜„
    • Activity View ๊ธฐ๋Šฅ ๊ตฌํ˜„
    • ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง
    • ๋งค์ง ๋ฆฌํ„ฐ๋Ÿด ์ œ๊ฑฐ ๋ฐ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ
  • 23.01.02
    • ManagedObjectModel protocol ๊ตฌํ˜„
    • DiaryExtractor ํƒ€์ž… ๊ตฌํ˜„ ๋ฐ ์ ์šฉ
    • DiaryManageable๋ฅผ CoreDataManageable๋กœ ๋ณ€๊ฒฝ ๋ฐ ์ˆ˜์ •
    • DiaryManager์— ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์ ์šฉ
    • Alert Factory ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ๋ฐ ์ ์šฉ
    • DiaryError Type ๊ตฌํ˜„ ๋ฐ ์ ์šฉ
    • ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง

๐Ÿ“Š UML


๐Ÿ’ป ์‹คํ–‰ ํ™”๋ฉด

๊ธฐ๋ณธ ๊ธฐ๋Šฅ

์ž์„ธํžˆ ๋ณด๊ธฐ
์ƒˆ๋กœ์šด ์ผ๊ธฐ ์ถ”๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ง„์ž… ์‹œ ์ž๋™ ์ €์žฅ ๋นˆ ๋‹ค์ด์–ด๋ฆฌ ์ž๋™ ์‚ญ์ œ
๊ฐ€๋กœ๋ชจ๋“œ

์ƒ์„ธํ™”๋ฉด

์ž์„ธํžˆ ๋ณด๊ธฐ
์ƒ์„ธํ™”๋ฉด์—์„œ ์ผ๊ธฐ ์‚ญ์ œ ์ƒ์„ธํ™”๋ฉด์—์„œ ๊ณต์œ  ๊ธฐ๋Šฅ

์Šค์™€์ดํ”„

์ž์„ธํžˆ ๋ณด๊ธฐ
์Šค์™€์ดํ”„๋ฅผ ์ด์šฉํ•˜์—ฌ ์ผ๊ธฐ ์‚ญ์ œ ์Šค์™€์ดํ”„๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณต์œ  ๊ธฐ๋Šฅ

๐ŸŽฏ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๋ฐ ๊ณ ๋ฏผ

DiaryManager ๊ตฌํ˜„

  • CRUD๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ CoreData์˜ Container๋ฅผ ์ด์šฉํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.
  • AppDelegate์— ๊ตฌํ˜„์„ ํ•ด๋‘๋ฉด ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค AppDelegate์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  ์–ธ๋ž˜ํ•‘ํ•˜๊ณ  ํ• ๋‹นํ•ด์ฃผ๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • CoreData๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ ‘๊ทผํ•ด์•ผ ๋˜๋Š” Container๋Š” DiaryCoreDataStack์ด๋ผ๋Š” ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์—ˆ๊ณ  DiaryDataManager๊ฐ์ฒด๋ฅผ ํ†ตํ•ด CRUD์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • DiaryCoreDataStack์˜ Singleton ๊ฐ์ฒด๋ฅผ DiaryDataManager์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์–ด์ƒ‰ํ•˜๊ฒŒ ๋Š๊ปด์กŒ์Šต๋‹ˆ๋‹ค.
  • DiaryDataManager์— Core Data Container๋ฅผ ๊ฐ€์ง€๋„๋ก ๊ตฌํ˜„ํ•˜์—ฌ DiaryManager ํƒ€์ž…์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

ObjectID ์‚ฌ์šฉ

  • CoreData์˜ Object์—์„œ UUID๋ฅผ id๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ• ์ง€ ์ œ๊ณต๋˜๋Š” ObjectID๋ฅผ ์ด์šฉํ• ์ง€๋ฅผ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.
  • UUID๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • object๋ฅผ ์–ป์œผ๋ ค๋ฉด fetch์ž‘์—…์„ ๋”ฐ๋กœ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • objectID๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด context์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ update, delete๋ฅผ ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— objectID๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ ๋ถ„๋ฆฌ

  • CoreData๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ ํ•˜๋‚˜๋กœ ๊ตฌํ˜„์„ ํ•ด์•ผํ• ๊นŒ, ์•„๋‹ˆ๋ฉด ์•ฑ์—์„œ ์‹ค์งˆ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ ํƒ€์ž… ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€๋กœ ๋งŒ๋“ค์–ด ๋‘๊ฐœ์˜ ๋ชจ๋ธ๋กœ ๊ตฌํ˜„์„ ํ•ด์•ผํ•  ๊นŒ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•œ ๊ฐœ๋กœ ํ•˜๋ฉด CoreData ๋ชจ๋ธ์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•  ์ˆ˜๋Š” ์žˆ๊ฒ ์ง€๋งŒ, CoreData ๋ชจ๋ธ์˜ ์—ญํ• ์ด ๋งŽ์•„์ง„๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๊ณ  ViewController์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ๋„ ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ ์–ด๊ธ‹๋‚œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์‹ค์งˆ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ ํƒ€์ž…์„ ๋งŒ๋“ค์–ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•˜์—ฌ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ManagedObjectModel ๊ตฌํ˜„

  • Core Data Entity๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๋•Œ, Entity๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Manager ๋ฐ VC์—์„œ ์‚ฌ์šฉํ•  Model์˜ ์ถ”์ƒํ™”๋ฅผ ์œ„ํ•ด objectID ํ”„๋กœํผํ‹ฐ๋ฅผ ์†Œ์œ ํ•˜๊ณ , init?(from: NSManagedObject)์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”์ƒํ™” ๊ฐ์ฒด๋ฅผ ํ”„๋กœํ† ์ฝœ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

AlertFactory

  • ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋‹ค ๋ณด๋‹ˆ ๊ฐ™์€ ๋น„์Šทํ•œ Alert์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.
  • ํŒฉํ† ๋ฆฌ ํŒจํ„ด์„ ์ด์šฉํ•˜๋ฉด ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋Š” ์ค„์ด๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ Alert์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Locale

์ž์„ธํžˆ ๋ณด๊ธฐ
  • ์ง€์—ญ ๋ฐ ์–ธ์–ด์— ๋งž๋Š” ์ž‘์„ฑ์ผ์ž๋ฅผ ํ‘œํ˜„ํ•ด์ฃผ๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Locale.current์˜ ๊ฐ’์ด ์ง€์—ญ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์–ธ์–ด๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ eu_KR๊ณผ ๊ฐ™์ด ์–ธ์–ด ๋ถ€๋ถ„์ด eu๋กœ ํ‘œํ˜„๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฏธ์ง€ ๋ณด๊ธฐ
Locale Current Device Setting
  • Locale.preferredLanguages.first๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •๋œ ์–ธ์–ด ์ค‘ ์ฒซ๋ฒˆ์งธ ์–ธ์–ด์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ž‘์„ฑ์ผ์ž๋ฅผ ํ‘œํ˜„๋˜๊ฒŒ ํ•ด์ฃผ์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Locale.current๋Š” ํ˜„์žฌ App์˜ ์ง€์›๋˜๋Š” Localization์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค Localization์„ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•ด์„œ Locale.current์— ๋”ฐ๋ผ์„œ UI๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•ด ์ค„ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

MainStoryboard์—†์ด Code๋กœ ๊ตฌํ˜„

์ž์„ธํžˆ ๋ณด๊ธฐ
  • ์š”๊ตฌ์‚ฌํ•ญ์— ์ฝ”๋“œ๋กœ๋งŒ UI๋ฅผ ์ž‘์„ฑํ•˜๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ์žˆ์–ด์„œ ์‹œ๋„ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

    1. Main.storyboard ์‚ญ์ œ
    2. info.plist์—์„œ storyboard๊ด€๋ จ ์‚ญ์ œ
    3. SceneDelegate์—์„œ ViewController๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก RootViewController ์„ค์ •
  • ์ด์™€ ๊ฐ™์ด ์ง„ํ–‰ํ•˜๊ณ  ์‹คํ–‰์‹œ์— Main์Šคํ† ๋ฆฌ๋ณด๋“œ ๊ด€๋ จํ•˜์—ฌ ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค

    1. ํ”„๋กœ์ ํŠธ ์„ค์ •์—์„œ Infoํƒญ์—์„œ ์ถ”๊ฐ€๋กœ StoryBoard๊ด€๋ จํ•ด์„œ ์‚ญ์ œ
    2. Build Settings์—์„œ main storyboard๊ด€๋ จ ์‚ญ์ œ
  • ์œ„์˜ ์ถ”๊ฐ€ ๊ณผ์ •์„ ํ†ตํ•ด Main ์Šคํ† ๋ฆฌ๋ณด๋“œ ์—†์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!


NavigationBar ๊ตฌ๋ถ„์„ 

์ž์„ธํžˆ ๋ณด๊ธฐ
  • MainStoryboard๊ฐ€ ์—†์ด ์ฝ”๋“œ๋กœ๋งŒ UI๋ฅผ ๊ตฌ์„ฑํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. NavigationController๋ฐ rootViewController๋ฅผ SceneDelegate์—์„œ ์ธ์Šคํ„ด์Šคํ™” ํ•ด์ฃผ์–ด์„œ ์ฒซ ํ™”๋ฉด์ด ๋ณด์—ฌ์ง€๊ฒŒ ๊ตฌํ˜„ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ iOS 15๋ถ€ํ„ฐ NavigationBar์˜ ๋””์ž์ธ์ด ์ˆ˜์ •๋˜์–ด ๊ตฌ๋ถ„์„ ์ด ๋ณด์ด์ง€ ์•Š๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • UINavigationBarAppearance๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•œ ํ›„ configureWithOpaqueBackground()๋ฉ”์„œ๋“œ๋กœ ํ˜„์žฌ ํ…Œ๋งˆ์— ์ ํ•ฉํ•œ ๋ถˆํˆฌ๋ช…ํ•œ bar appearance object๋กœ ๊ตฌ์„ฑํ•œ ๋’ค NavigationController.navigationBar์— standardAppearance๋ฐ scrollEdgeAppearance์— ํ• ๋‹นํ•ด ์คŒ์œผ๋กœ ์ด์ „์— ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
์ฝ”๋“œ ๋ณด๊ธฐ
let navigationController = UINavigationController(rootViewController: mainViewController)
let navigationBarAppearance = UINavigationBarAppearance()
navigationBarAppearance.configureWithOpaqueBackground()
        
navigationController.navigationBar.standardAppearance = navigationBarAppearance
navigationController.navigationBar.scrollEdgeAppearance = navigationBarAppearance

Cell์˜ identifier

์ž์„ธํžˆ ๋ณด๊ธฐ
// 1๋ฒˆ
static let identifier: String = String(describing: self)

// 2๋ฒˆ
static func getIdentifier() -> String {
        return String(describing: self)
}
  • 1๋ฒˆ๊ณผ 2๋ฒˆ ๋ฐฉ๋ฒ• ์ค‘ Cell์˜ identifier์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋” ๋‚˜์€์ง€ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
์ฝ”๋“œ ๋ณด๊ธฐ
protocol ReusableView: class {
    static var defaultReuseIdentifier: String { get }
}

extension ReusableView where Self: UIView {
    static var defaultReuseIdentifier: String {
        return String(describing: self)
    }
}

๐Ÿ’ก ํ”„๋กœ์ ํŠธ ์ˆ˜ํ–‰ ์ค‘ ํ•ต์‹ฌ ๊ฒฝํ—˜

  • CoreData ๋ชจ๋ธ ์‚ฌ์šฉ
  • Factory Method Pattern ํ™œ์šฉ
  • Singleton Pattern ์ ์šฉ
  • UITableViewDiffableDataSource
  • Date Formatter ํ™œ์šฉ
  • UIContextualAction
  • UISwipeActionsConfiguration
  • UIActivityViewController

๐Ÿ“š ์ฐธ๊ณ  ๋งํฌ

ios-diary's People

Contributors

onestar92 avatar yagom avatar zhilly11 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.