Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Swift Outside the Box

Swift Outside the Box

Yusuke Ito

March 03, 2017
Tweet

More Decks by Yusuke Ito

Other Decks in Programming

Transcript

  1. S W I F T O U T S I D E T H E B O X
    Y U S U K E I T O
    S H I R O YA G I C O R P O R AT I O N
    T RY ! S W I F T T O K Y O 2 0 1 7
    Twitter @novi_ Github @novi

    View Slide

  2. T O P I C S
    • Server Side Swift
    • 2 Real Projects
    • 1.
    • 2.
    • Porting Library to Swift

    View Slide

  3. S E R V E R S I D E S W I F T

    View Slide

  4. • Swift is open-sourced since Dec 2015
    • Foundation, XCTest and Dispatch
    • Package Manager
    • Works on macOS and Linux(Ubuntu)
    • Platform: x86_64, ARM(unofficial)
    • Oct 2016: Server APIs Work Group launched

    View Slide

  5. • Swift for Non-Apple Platform
    • for Web servers, API servers
    • for Microservices
    • for Daemons, Utilities, Tools
    • Runs on…
    • Linux (IBM, Amazon, Google cloud)
    • Linux board computers (e.g. Raspberry Pi)

    View Slide

  6. W H Y S W I F T ?
    • Traditionally Use Node.js, Python, Ruby, etc… for Server-Side
    programming
    • Swift has…
    • Types, Protocol, Value Associated Enumeration, etc… for Better,
    Safer Programming
    • Good Performance
    • Alternatives for Scripting Programming Languages

    View Slide

  7. B A C K E N D S E R V I C E 

    W I T H S W I F T
    R E A L P R O J E C T 1 , O U R C O M PA N Y P R O J E C T

    View Slide

  8. S W I F T B A S E D W E B C R AW L E R
    • Backend service of our products
    • RSS/HTML Crawling / Web scraping
    • Crawl specified Web pages, Parse the HTML, Save to the database
    as a Search bot
    • Extract body text excluding Navigation or submenu on the HTML

    View Slide

  9. a Web Page
    URL = https://swift.org/blog/swift-4-0-release-process/
    N AV I G AT I O N
    E L E M E N T S
    METADATA ELEMENTS
    BODY ELEMENTS

    View Slide

  10. Settings
    Contents
    Images
    Save settings,
    Set HTML extraction rules (XPaths)
    Get HTML and Text result of crawling
    Fetch a Web HTML
    Parse the HTML/XML
    Save to the Database
    CRAWLER
    (Process)
    D ATA B A S E
    ( M Y S Q L / S 3 )
    API SERVER
    (In-house use)
    Based on gRPC protcol

    View Slide

  11. W H AT W E N E E D ?
    • HTTP(S)Client
    • XML/HTML Parsing, XPath(CSS Selector) traversing
    • MySQL Library
    • S3 Client
    • gRPC, Protocol Buffers Library
    • Japanese Charset converter (for Shift-JIS, EUC_JP charset)

    View Slide

  12. S W I F T A N D C L A N G U A G E
    • Swift is LLVM based
    • Link with C based Library
    • Export C interface to Swift transparently
    • Swift Package Manager supports C compile (.c and .h)
    All C Libraries are Available on Swift!!

    View Slide

  13. W H AT W E N E E D ? ( A G A I N )
    • HTTPClient, AWS S3Client
    • libcurl (C based)
    • XML/HTML Parsing, XPath(CSS Selector) traversal
    • libxml2 (C based)
    • MySQL Library
    • C based mysqlconnector
    • Japanese Charset converter (Shift-JIS, EUC_JP)
    • nkf(Network Kanji Filter) (C based)

    View Slide

  14. • gRPC: grpc/grpc-swift
    • Protobuf: apple/swift-protobuf
    • SHA1: IBM-Swift/BlueCryptor

    View Slide

  15. O U R C U R R E N T S TAT U S
    • Code base(including Tests)
    • Crawler:~10,000 lines
    • In-house library: ~9,000 lines
    • Unit Tests is works well with Xcode
    • Running on macOS fine, ~20 days OK!
    • Running on our Development environment (Docker, Linux), 7 days OK!

    View Slide

  16. O U R N E X T S T E P …
    • Deploy to Production environment (AWS)
    • Mesure performance, stability

    View Slide

  17. W O R K I N G W I T H 

    S E N S O R S
    P R O J E C T 2 : P E R S O N A L P R O J E C T

    View Slide

  18. • Swift for ARM and Raspberry Pi (Linux board computer)
    • Control many Devices via GPIO and I2C bus
    • Various Sensors, Lights, LCD, …
    • Combine with Swift libraries
    • Of Course, Written in Swift all !!
    Swift for ARM:
    https://github.com/iachievedit/package-swift

    View Slide

  19. Linux board
    Air Pressure Sensor
    S E N S O R
    R A S P B E R RY
    P I
    S E R V E R S I D E
    S W I F T
    Slack API
    S E R V E R
    HTTPS
    POST
    hPa
    ℉ (℃)
    I2C I N T E R N E T
    WiFi

    View Slide

  20. View Slide

  21. View Slide

  22. • Controlling I2C bus
    • #include
    • I2C bus file: /dev/i2c-0…
    • Use “fopen”, “ioctl” system call
    • github.com/novi/i2c-swift-example

    View Slide

  23. sensor data MesurementResult(temperature: 229, pressure: 101507)
    // get current air pressure and temperature
    let device = try getCurrentI2CDevice()
    let sensor = BMP180(device: device)
    try sensor.reset()
    try sensor.calibrate()
    let result = try sensor.mesure(oversampling: .oss3)
    print("sensor data", result)

    View Slide

  24. // build message
    let temp = Float(result.temperature) / 10
    let fahrenheit = 1.8 * Float(result.temperature) / 10 + 32
    let press = Float(result.pressure) / 100 // in hpa
    let tempStr = String(format: "%.0f°F(%.1f°C)", fahrenheit, temp)
    let pressStr = String(format: "%.2fhPa", press)
    let message = "\(tempStr) \(pressStr) \(formatDate(Date()))"
    // post to slack
    slack.sendMessage(channel: sendChannel, text: message, success: { (a, b) in

    View Slide

  25. P O R T I N G L I B R A RY T O S W I F T

    View Slide

  26. 1. Find C based Library
    • Wrap with Swift ➜
    • Make it more Swifty ➜
    • e.g.) libcurl, libxml, mysqlconnector
    2. Find similar Libraries in Node.js, Python, Ruby…
    • Port other Language’s Library back to Swift ➜
    • Make it more Swifty ➜
    • e.g.) NKF
    Write your Swift program with them




    View Slide

  27. M Y L I B R A R I E S F O R S E R V E R S I D E S W I F T
    • MySQL: novi/mysql-swift
    • NKF: novi/nkf-swift
    • I2C: novi/i2c-swift

    View Slide

  28. Tokyo-Server Side Swift Meetup
    https://tokyo-ss-swift.connpass.com

    View Slide

  29. S TA RT I N G S E R V E R S I D E S W I F T W I T H …
    • Batch programs
    • API Servers
    • In-house deployment tools
    • Command-line utilities

    View Slide

  30. • Start with SPM(Swift Package Manager)
    • Similar to Carthage and Cocoapods
    $ swift package init —type=executable
    hello world
    $ swift package init —type=library
    $ swift package generate-xcodeproj

    View Slide

  31. S C R I P T I N G S W I F T
    • $ touch test.swift && chmod a+x test.swift
    • $ ./test.swift

    apple.com
    #!/usr/bin/env swift
    import Foundation
    let url = URLComponents(string: "https://apple.com")!
    print(url.host!)

    View Slide

  32. C O N C L U S I O N
    • Swift is great programming language
    • Safety, Efficiently
    • Open-sourced
    • Works well with C based Library
    • Works well on Various Platforms

    View Slide

  33. try! Server Side Swift
    with your Small Projects

    View Slide