Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
How to make and publish a Swift playground book...
Search
sonson
September 01, 2018
Programming
19k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
How to make and publish a Swift playground book for iPad
sonson
September 01, 2018
More Decks by sonson
See All by sonson
計算グラフのJITコンパイラをLLVM on C++で作ろう
sonsongithub
2
630
LLVMでHalideみたいな計算グラフ+JITを作りたい
sonsongithub
0
1.6k
LLVM Tutorial 02 - わいわいswiftc
sonsongithub
1
460
LLVM Tutorial - わいわいswiftc
sonsongithub
0
360
Swiftで実装するHTML特殊文字の高速処理
sonsongithub
3
8.1k
First step of 3D touch
sonsongithub
0
720
Getting started with 3D Touch
sonsongithub
0
810
SSLって必要ですか〜Let's Encryptを試してみよう
sonsongithub
3
610
Other Decks in Programming
See All in Programming
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
180
Family mrubyの進捗
kishima
1
110
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.9k
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
700
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
220
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.7k
Security issues being discussed on Web Platforms
petamoriken
0
500
XHTMLが残したもの
yosuke_furukawa
PRO
2
640
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
Deep dive into the select statement (GopherCon UK)
jespino
0
170
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
270
Featured
See All Featured
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
65k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
500
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Navigating Team Friction
lara
192
16k
The Curious Case for Waylosing
cassininazir
1
500
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
230
Designing for Timeless Needs
cassininazir
1
470
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
420
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Transcript
Χϝϥ͔Βͷը૾ΛϦΞϧλΠϜʹ͍͡ΔPlayPixels Tech. Yuichi Yoshida Senior researcher, DENSO IT Laboratory, Inc.
#iOSDC2018 @sonson_twit © 2014 DENSO IT Laboratory, Inc., All rights reserved. Redistribution or public display not permitted without written permission from DENSO IT Laboratory, Inc. Swift Playgrounds Bookͷ࡞ΓํͱΓํ
ࣗݾհ • sonson • twitter: sonson_twit • github: sonsongithub •
portfolio • 2tchɾɾɾଟɼࣙΊΔ • numsw • iOS11 Programming Book(ൃചத) • ࣄ(computer vision, machine learning) • ը૾ೝࣝɾݕࡧٕज़ • ࠷ۙσʔλαΠΤϯεతͳ͜ͱ
$PSF.-ͱ$SFBUF.-ʹ ͍ͭͯॻ͘Α
ࠓͷత
Swift Playgrounds
None
σϞ • AppleͷσϞ
ࠓͷ͓ • త • iPadʹࣗΈͷSwift codingڥΛ࡞Δ • ͦ͏͍͏ڥΛΈΜͳͰެ։͋ͬͯ͠ɼָ͠Ή • ࡞Γํͱެ։ํ๏
• AppleۘͷςϯϓϨʔτʹΑΔ࡞ΓํΛհ • ެ։Ͱ͖ΔΜͰ͢Αɼ͜Ε͕ɽ • Χϝϥͷը૾ॲཧΛ͢Δαϯϓϧ • ը૾ॲཧͷࠜװΛͬͯΒ͏
͜͏͍͏ͷΛΈΜͳͰ • ରʢ͓͢͢Ίʣ • Binary searchͷσϞ • ֆจࣈॲཧͷσϞ • numsw
- ઢܗ • PlayPixelsʢࠓͷϝΠϯσΟογϡʣ
͍͍ͱ͜Ζ • ϝΠϯͷతڭҭΒ͍͠ • ͰͶ͐ɾɾίϯςϯπ࡞Δͷେม • iPadͰಈ͘ʂʂʂ • Ͳ͜Ͱίʔυ͕ॻ͚Δ •
͓खܰɼ͔ͬ͜Α͘σϞͰ͖Δ • ͲΜͲΜਐԽ͍ͯ͠Δ • Χϝϥ͕͑ΔΑ͏ʹͳͬͨʂ • Bluetooth͕͑ΔΑ͏ʹͳͬͨʂ
ͭΒ͍ͱ͜Ζ • ϑϨʔϜϫʔΫϥΠϒϥϦ͕͑ͳ͍ • ͯ͢ιʔείʔυΦʔϓϯʹͳͬͯ͠·͏ • σόοά͕େม • Ϛγʹͳ͖ͬͯͨ •
AppleLEGOͷίϯςϯπ͕͗͢͢͝Δ • ૉਓ͕࡞Δͱɼ൵͍͠ɾɾɾɾ
PlaygroundBookͷ࡞Γํ
PlaygroundBook
Playgroundbookͷߏ ├── Chapters │ └── Chapter1.playgroundchapter │ ├── Manifest.plist │
└── Pages │ ├── Basic.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ ├── Binarize.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ └── Filter.playgroundpage │ ├── Contents.swift │ ├── LiveView.swift │ └── Manifest.plist ├── Manifest.plist ├── PrivateResources │ ├── Base.lproj │ │ └── LiveView.storyboard │ ├── en.lproj │ │ └── ManifestPlist.strings │ └── icon.png └── Sources ├── LiveViewController.swift └── LiveViewSupport.swift
֓ཁ -JWF7JFXTXJGU $POUFOUTTXJGU
࡞Γํ • AppleͷςϯϓϨʔτΛ͏ʢమଇʣ • Swift Playgrounds Author Template for Xcode
9.3Λσ ϕϩούʔαΠτ͔Βμϯϩʔυ
·ͣઃఆ • README.mdͷ”First Step”ʹै͍ɼϓϩδΣΫτͷ໊લ ͱ͔Λมߋ͢Δ • దʹΔͱ໘ष͍͜ͱʹͳΔͷͰҙ • AppleͷςϯϓϨ͔ͳΓνϡʔϯ͞ΕͯΔɾɾɾʁ
ϓϩδΣΫτͷ ໊લͳͲͷม ·ͣಡΉ Ͱͳ͍ͱϋϚΔ γϛϡϨʔλ্Ͱ#MVFUPPUI ͳͲΛ࠶ݱ͢ΔͨΊͷπʔϧ-JC γϛϡϨʔλΞϓϦຊମ 1MBZHSPVOE#PPL ຊମ
Swift Playgrounds Author Template • ΞϓϦͱͯ͠BookΛಈ͔͠ɼσόοά͘͢͠ • BluetoothͷUIΛΤϛϡϨʔτ • ϏϧυεΫϦϓτࠐΈ
• σόοά • iOS12ͰSwift PlaygroundsͰNSLogΛ࣮ߦͯ͠Կ දࣔ͞Εͳ͍ɾɾɾɾ • ͜ͷςϯϓϨʔτ͕།Ұͷ։ൃڥɾɾɾɾ
λʔήοτ 4XJGU1MBZHSPVOE#PPL
λʔήοτ #PPLͷγϛϡϨʔλͱͯ͠ͷΞϓϦ
λʔήοτ ΞϓϦͷͨΊʹίʔυΛ-JCʹ
-JWF7JFX5FTUBQQͷͨΊͷ ϑϨʔϜϫʔΫ
ͷத
Playgroundbookͷߏ ├── Chapters │ └── Chapter1.playgroundchapter │ ├── Manifest.plist │
└── Pages │ ├── Basic.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ ├── Binarize.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ └── Filter.playgroundpage │ ├── Contents.swift │ ├── LiveView.swift │ └── Manifest.plist ├── Manifest.plist ├── PrivateResources │ ├── Base.lproj │ │ └── LiveView.storyboard │ ├── en.lproj │ │ └── ManifestPlist.strings │ └── icon.png └── Sources ├── LiveViewController.swift └── LiveViewSupport.swift
Playgroundbookͷߏ ├── Chapters │ └── Chapter1.playgroundchapter │ ├── Manifest.plist │
└── Pages │ ├── Basic.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ ├── Binarize.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ └── Filter.playgroundpage │ ├── Contents.swift │ ├── LiveView.swift │ └── Manifest.plist ├── Manifest.plist ├── PrivateResources │ ├── Base.lproj │ │ └── LiveView.storyboard │ ├── en.lproj │ │ └── ManifestPlist.strings │ └── icon.png └── Sources ├── LiveViewController.swift └── LiveViewSupport.swift ຊମ
Playgroundbookͷߏ ├── Chapters │ └── Chapter1.playgroundchapter │ ├── Manifest.plist │
└── Pages │ ├── Basic.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ ├── Binarize.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ └── Filter.playgroundpage │ ├── Contents.swift │ ├── LiveView.swift │ └── Manifest.plist ├── Manifest.plist ├── PrivateResources │ ├── Base.lproj │ │ └── LiveView.storyboard │ ├── en.lproj │ │ └── ManifestPlist.strings │ └── icon.png └── Sources ├── LiveViewController.swift └── LiveViewSupport.swift ϖʔδ ࠷খ୯Ґ
Playgroundbookͷߏ ├── Chapters │ └── Chapter1.playgroundchapter │ ├── Manifest.plist │
└── Pages │ ├── Basic.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ ├── Binarize.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ └── Filter.playgroundpage │ ├── Contents.swift │ ├── LiveView.swift │ └── Manifest.plist ├── Manifest.plist ├── PrivateResources │ ├── Base.lproj │ │ └── LiveView.storyboard │ ├── en.lproj │ │ └── ManifestPlist.strings │ └── icon.png └── Sources ├── LiveViewController.swift └── LiveViewSupport.swift ֤ϖʔδͷઃఆ
Playgroundbookͷߏ ├── Chapters │ └── Chapter1.playgroundchapter │ ├── Manifest.plist │
└── Pages │ ├── Basic.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ ├── Binarize.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ └── Filter.playgroundpage │ ├── Contents.swift │ ├── LiveView.swift │ └── Manifest.plist ├── Manifest.plist ├── PrivateResources │ ├── Base.lproj │ │ └── LiveView.storyboard │ ├── en.lproj │ │ └── ManifestPlist.strings │ └── icon.png └── Sources ├── LiveViewController.swift └── LiveViewSupport.swift ຊͷߏ
Playgroundbookͷߏ ├── Chapters │ └── Chapter1.playgroundchapter │ ├── Manifest.plist │
└── Pages │ ├── Basic.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ ├── Binarize.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ └── Filter.playgroundpage │ ├── Contents.swift │ ├── LiveView.swift │ └── Manifest.plist ├── Manifest.plist ├── PrivateResources │ ├── Base.lproj │ │ └── LiveView.storyboard │ ├── en.lproj │ │ └── ManifestPlist.strings │ └── icon.png └── Sources ├── LiveViewController.swift └── LiveViewSupport.swift Ϧιʔε
Playgroundbookͷߏ ├── Chapters │ └── Chapter1.playgroundchapter │ ├── Manifest.plist │
└── Pages │ ├── Basic.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ ├── Binarize.playgroundpage │ │ ├── Contents.swift │ │ ├── LiveView.swift │ │ └── Manifest.plist │ └── Filter.playgroundpage │ ├── Contents.swift │ ├── LiveView.swift │ └── Manifest.plist ├── Manifest.plist ├── PrivateResources │ ├── Base.lproj │ │ └── LiveView.storyboard │ ├── en.lproj │ │ └── ManifestPlist.strings │ └── icon.png └── Sources ├── LiveViewController.swift └── LiveViewSupport.swift Ұ൪େ ڞ௨ͷΫϥεͱ͔
playgroundpageͷߏཁૉ • LiveView.swift • Contents.swift • Manifest.plist
LiveView.swift • LiveView.swiftʹॻ͘͜ͱ͋Μ·Γͳ͍ • LiveViewControllerΛ͜͜Ͱੜ • receiveͰίϯτϩʔϥ͔ΒσʔλΛ͏͚ͱΓඳը • ॏཁͳͷɼLiveViewControllerͷ࣮ import
UIKit import PlaygroundSupport PlaygroundPage.current.liveView = sharedLiveViewController
Contents.swift • ίʔσΟϯάʹؔ͢Δίϝϯτώϯτɼεέϧτϯίʔυ • ษڧͱͯ͠ͷίϯςϯπͪ͜Β͕ओ //#-hidden-code import UIKit import PlaygroundSupport
//#-end-hidden-code func process(input: UnsafePointer<CUnsignedChar>, output: inout [CUnsignedChar], width: Int, height: Int, bytesPerPixel: Int) { //#-editable-code // write your own code //#-end-editable-code } //#-hidden-code class Listener: PlaygroundRemoteLiveViewProxyDelegate { func remoteLiveViewProxy(_ remoteLiveViewProxy: PlaygroundRemoteLiveViewProxy, received message: PlaygroundValue) { // handle message from LiveViewController } } let listener = Listener() if let proxy = page.liveView as? PlaygroundRemoteLiveViewProxy { proxy.delegate = listener } //#-end-hidden-code
Manifest.plist - Page 1MBZHSPVOE-PHHJOH.PEF0⒎ -JWF7JFX&EHF5P&EHF:&4
Manifest.plist - Page 1MBZHSPVOE-PHHJOH.PEF/PSNBM -JWF7JFX&EHF5P&EHF:&4
Manifest.plist - Page 1MBZHSPVOE-PHHJOH.PEF0⒎ -JWF7JFX&EHF5P&EHF:&4
cutscenepageͷߏཁૉ • playgroundpageͱҟͳΓHTMLදࣔՄೳ • ϑΥϧμ໊ɹ00.cutscenepage • Manifest.plistʹHTMLΛࢦఆ • PrivateResourcesʹݴޠ͝ͱʹHTMLΛ༻ҙ͢Δ •
ίʔυෆཁͷϜʔϏʔͬΆ͍ͷʹ͏Α͏ͩ
جຊίϯηϓτ -JWF7JFXͷϓϩηε $POUFOUͷϓϩηε
جຊίϯηϓτ -JWF7JFXͷϓϩηε $POUFOUͷϓϩηε
جຊίϯηϓτ -JWF7JFXͷϓϩηε $POUFOUͷϓϩηε 1SPYZ
ૹΔͱ͖྆ํͱಉ͡ -JWF7JFXͷϓϩηε $POUFOUͷϓϩηε 1SPYZ TFOE @NFTTBHF1MBZHSPVOE7BMVF
ૹड৴Ͱ͖Δܕ public enum PlaygroundValue { case array([PlaygroundSupport.PlaygroundValue]) case dictionary([String :
PlaygroundSupport.PlaygroundValue]) case string(String) case data(Data) case date(Date) case integer(Int) case floatingPoint(Double) case boolean(Bool) }
ૹΔͱ͖྆ํͱಉ͡ -JWF7JFXͷϓϩηε $POUFOUͷϓϩηε 1SPYZ TFOE @NFTTBHF1MBZHSPVOE7BMVF
ड৴͚͕ͩҟͳΔ $POUFOUͷϓϩηε class Listener: PlaygroundRemoteLiveViewProxyDelegate { var pixelBuffer24bit: [CUnsignedChar]? func
remoteLiveViewProxy(_ remoteLiveViewProxy: PlaygroundRemoteLiveViewProxy, received message: PlaygroundValue) { // handle a message } func remoteLiveViewProxyConnectionClosed(_ remoteLiveViewProxy: PlaygroundRemoteLiveViewProxy) { } } let listener = Listener() if let proxy = page.liveView as? PlaygroundRemoteLiveViewProxy { proxy.delegate = listener }
ૹΔͱ͖྆ํͱಉ͡ -JWF7JFXͷϓϩηε $POUFOUͷϓϩηε 1SPYZ TFOE @NFTTBHF1MBZHSPVOE7BMVF
ड৴͚͕ͩҟͳΔ -JWF7JFXͷϓϩηε @objc(Book_Sources_LiveViewController) public class LiveViewController: UIViewController, PlaygroundLiveViewMessageHandler, PlaygroundLiveViewSafeAreaContainer {
public func receive(_ message: PlaygroundValue) { update(message) } }
جຊίϯηϓτ -JWF7JFXͷϓϩηε $POUFOUͷϓϩηε 1SPYZ
PlayPixelsͷ߹ -JWF7JFXͷϓϩηε $POUFOUͷϓϩηε 1SPYZ ը૾ॲཧ $BNFSB ͜ͷॲཧͷίʔυ $POUFOUTTXJGU Ωϟϓνϟͨ͠ ը૾Λ%BUBʹ
PlayPixelsͷ߹ -JWF7JFXͷϓϩηε $POUFOUͷϓϩηε 1SPYZ %BUBʹ ύοΩϯά 6**NBHFʹ 6**NBHF7JFXʹηοτ
LiveViewTest.app • UIApplicationΛվʁ • LiveViewControllerͷಈ࡞֬ೝ༻ͷΞϓϦ • Swift Playgroundsઐ༻ͷUIͷςετ • ͦͷͨΊͷBluetoothͳͲͷϑϨʔϜϫʔΫ
• Contents.swiftͷཧίʔυͷ࣮͕ඞཁ ͏͖ɽσόοάͰࢮͶΔ #if LiveViewTestApp // γϛϡϨʔλͰಈ͔͢ͱ͖ɼϝιουΛͰୟ͖ɼContents.swiftͷΘΓΛ࣮ߦ self.update(value) #else // PlaygroundͰಈ͔͢ͱ͖ɼproxyܦ༝ͰContents.swiftʹσʔλΛૹΔ self.send(value) #endif
Playground Book • PlaygroundSupportͱݺΕΔϞδϡʔϧ͕৭ʑػೳΛఏڙ • ςϯϓϨʔτͰγϛϡϨʔγϣϯՄೳ • PlaygroundValueܕͰͤΔσʔλͷܕͷόϦΤʔγϣϯ͕গͳ͍ • ؔͱ͔ͤͳ͍
• LiveViewTest.appɼContents.swiftͱແؔ • ίϯςϯπΛ͏·͘දࣔͤ͞ΔͨΊͷςετίʔυ͕ඞཁ
։ൃͷྲྀΕʁ • TemplateΛฤू • LiveViewControllerΛ࣮ • AppDelegate.swiftͰίϯςϯπΛදࣔ͢ΔίʔυΛ ॻ͘(Contents.swift) • iPad࣮ػͰɼLiveViewTest.appΛςετ
• PlaygroundBookΛϏϧυ • AirDropͰiPad࣮ػʹPlaygroundBookΛૹΔ • Swift PlaygroundsͰ࣮ߦ͢Δ
υΩϡϝϯτ • Playground Book Format Reference • Swift PlaygroundsͷϓϩδΣΫτࣗମ͕ιʔεͷๅݿ
Furthermore, • Contents.swiftͷৄ͍͠ઃఆ • ίϯςϯπ࡞ΓͶ • ଟݴޠԽʢَʣ • Key-value store͋Δ
• AssesmentStatus • ϢʔβͷਐḿධՁ༻ͷΈʁ
PlaygroundBookΛެ։͢Δ
ެ։ํ๏ • ࠷ۙͬͱެ։Ͱ͖ΔΑ͏ʹͳͬͨ • Ϣʔβ͕Swift Playgrounds͔ΒfeedΛొՄೳ • ϒϥβ͔Βొ͢Δ͜ͱͰ͖Δ
खॱ • ެ։ͷͨΊͷjsonϑΝΠϧ(feed)Λ࡞Δ • BookΛෳݸऩΊΒΕΔ • ϋϚΔϙΠϯτ • λΠτϧͱ໊લ͕Ұக •
λΠτϧͱղౚޙͷ໊લ͕Ұக • identifier͕Ұக
feed { "title": "sonson", "publisherName": "Yuichi Yoshida", "feedIdentifier": "com.sonson.playground", "contactURL":
"mailto:
[email protected]
", "formatVersion": "1.0", "documents": [ { "title": "PlayPixels", "overviewSubtitle": "To be written.", "detailSubtitle": "αϒλΠτϧৄࡉ", "description": "ৄ͍͠આ໌", "contentIdentifier": "com.sonson.playground.PlayPixels", "contentVersion": "1.0", "url": "https://sonson.jp/playgrounds/playpixels/PlayPixels.playgroundbook.zip", "publishedDate": "2018-05-18T12:00:00+00:00", "lastUpdatedDate": "2018-05-18T12:00:00+00:00", "thumbnailURL": "playpixels/thumbnail.png", "bannerImageURL": "playpixels/thumbnail.png", "additionalInformation": [ { "name": "Languages", "value": "English" } ], "previewImageURLs": [] } ] }
खॱ • ެ։ͷͨΊͷjsonϑΝΠϧ(feed)Λ࡞Δ • BookΛෳݸऩΊΒΕΔ • ϋϚΔϙΠϯτ • λΠτϧͱ໊લ͕Ұக •
λΠτϧͱղౚޙͷ໊લ͕Ұக • identifier͕Ұக • feedʹࢦఆͨ͠ύεʹzipͰݻΊͨbookϑΝΠϧΛஔ͘ ├── feed.json ├── index.html └── playpixels ├── PlayPixels.playgroundbook.zip └── thumbnail.png
ϒϥβ͔ΒμΠϨΫτʹొ "https://developer.apple.com/ul/sp0?url=https://sonson.jp/playgrounds/feed.json"
https://sonson.jp/playgrounds/
Swift Playgrounds͕ىಈ
ొɾɾɾɾײಈ
PlayPixelsͰֶͿը૾ॲཧͷجຊ
https://github.com/sonsongithub/PlayPixels
ը૾ॲཧͷجຊ
ը૾ॲཧͷجຊ
ը૾ॲཧͷجຊ
ը૾ॲཧͷجຊ
ΈࠐΈԋࢉʔϑΟϧλ ೖྗը૾ ग़ྗը૾
ϑΟϧλ
ΈࠐΈԋࢉʔϑΟϧλ ೖྗը૾ ग़ྗը૾
ΈࠐΈԋࢉʔϑΟϧλ ೖྗը૾ ग़ྗը૾
º
ΈࠐΈԋࢉʔϑΟϧλ ೖྗը૾ ग़ྗը૾
ΈࠐΈԋࢉʔϑΟϧλ ೖྗը૾ ग़ྗը૾
ΈࠐΈԋࢉʔϑΟϧλ ೖྗը૾ ग़ྗը૾
ΈࠐΈԋࢉʔϑΟϧλ ೖྗը૾ ग़ྗը૾
ϑΟϧλͷαΠζͰ ͪΐͬͱখ͘͞ͳΔ
͜ΕɾɾɾͲΜͳϑΟϧλʁ
࣮ ܀ాଟتɺึতଠ, ύλʔϯೝࣝ ૣҴాେֶߨٛ – ฏ18
ྲྀߦΓͷCNN Y. Lecun, L. Bottou, Y. Bengio and P. Haffner,
"Gradient-based learning applied to document recognition," in Proceedings of the IEEE, vol. 86, no. 11, pp. 2278-2324, Nov. 1998. ͜ͷॏΈΛػցֶशͰಘΔ
·ͱΊ • Swift playgroundsͷָ͠͞ • Swift Playgrounds Author TemplateΛ͓͏ •
Bookͷجຊ • Proxyϕʔεͷϓϩάϥϛϯά • Feedͷઃఆ • ެ։ɼPlayground.appͰͰ͖Δʂ • PlayPixelsͰֶͿɼը૾ॲཧͷجຊ