Swift & Bluepic Oct 25Th, 2017
Total Page:16
File Type:pdf, Size:1020Kb
Swift & BluePic Oct 25th, 2017 Ricardo Olivieri 1 Agenda • Swift introduction • Benefits • Modern language constructs • Platforms • Why Swift on the server? • Provisioning Swift applications to the IBM Cloud • The IBM Cloud Buildpack for Swift • How to use the IBM Cloud Buildpack for Swift? • What is Kitura? • What is BluePic? • Architecture 2 • IBM Cloud Capabilities • Demo! • Resources Swift introduction • Before Swift, Objective-C was the programming language for developing iOS and macOS apps. • Swift provides a much simpler syntax than Objective-C. • As soon as Swift was released, developers started sharing their preference of Swift over Objective-C, given its support of many modern programming conventions (e.g. tuples, generics, closures, type inference, and optionals). 3 Swift introduction Objective-C: Person *person = ...; NSMutableString *description = [[NSMutableString alloc] init]; [description appendFormat:@"%@ is %i years old.", person.name, person.age]; if (person.employer) { [description appendFormat:@" They work for %@.", person.employer]; } else { [description appendString:@" They are unemployed."]; } Swift: var person = … var description = "" description += "\(person.name) is \(person.age) years old." if let employer = person.employer { description += " They work for \(employer)." } else { description += " They are unemployed." } 4 Swift introduction • Type inference • Optionals • Generics • Tuples • Extensions • … 5 The Case for Swift, a Powerful, Intuitive and Uncompromising Programming Language 600% One of the most loved Increase in request for 36K languages Swift Skills Stars in Github (source: Stack Overflow) (source: Toptal) • Modern programming language constructs • A vibrant developer base • Error detection at compile, not run time • No performance compromises for productivity • Easier code re-engineering 6 It’s more than hype! http://www.timqian.com/star-history/ #apple/swift&ruby/ruby&scala/scala&aspnet/Home&golang/go&nodejs/node&rust-lang/rust 7 Platforms where you can run Swift today! 8 Why Swift on the Server? 9 Full stack developer & professional growth NodeJS Attracted Web-based Developers to the Cloud Hybrid / Web App Development >13 Million Apple Swift on the Server can attract Developers Swift-based Developers ~100 Apple/IBM Enterprise Solutions and Assets Swift App Development 10 > y o l p e D > l d i u B > t s e T > p o l e v e D Backend Services 11 Big Data and Cognitive Application mid-tier Services Logical Extension of AppWeb Framework Host Background App Logic, Filter/StageWeb DataMiddleware (Sessions, Credentials) Standup Web APIs for App Host Web version of App (static file serving) • • Persistence: Databases • Integration: MQ, On-prem APIs Connect to other Services for: Notifications: Push, SMS, Email • Cognitive: Watson • Caching: Redis • • • D D Application mid-tier layer e e v v D e e e l l v o Frontend Applications o e p p l o p > > > > > > T T e e s s T t t e s t > > > > > > B B u u i i B l l u d d i l d > > > > > > D D e e p p D l l e o o p y y l o > > y > > > > Provisioning Swift Applications On The IBM Cloud 12 What is the IBM Cloud Buildpack for Swift? • Cloud Foundry buildpacks provide the runtime required to execute your applications on the Bluemix cloud. • There are many Cloud Foundry buildpacks available (e.g. java_buildpack, ruby_buildpack, nodejs_buildpack) on the IBM Cloud. • The IBM Cloud buildpack for Swift is a new addition to the family of buildpacks on the IBM Cloud. • Swift applications that follow the structure and conventions required by the Swift Package Manager can now be provisioned on the IBM Cloud. • Implementing back-end components and micro services in the Swift language that execute on the IBM Cloud is entirely feasible today. 13 What are the main execution phases for a buildpack? • When an application is pushed to the IBM Cloud, buildpacks are responsible for the execution of three main phases: • Detection – The buildpack lets the Cloud Foundry platform whether it can provision the application. • Compilation – The buildpack compiles/builds the application; determines what tools should be used for linking and building the app; environment variables are updated as well as needed. • Release – The buildpack provides metadata on how to execute the application (though this is more useful for containerized environments such as JEE). • Once the application is provisioned on the IBM Cloud, the buildpack is completely out of the picture! 14 How to use the IBM Cloud Buildpack for Swift • Swift 4 applications that follow the conventions and structure required by the Swift Package Manager can be pushed to Bluemix. • Use the IBM Cloud command line to get list of installed buildpacks • bx cf buildpacks • Use bx app push to provision your app on Bluemix • Use the bx app logs command to get a dump of the Cloud Foundry logs: • bx app logs Kitura-Starter –recent • Enable debugging to obtain more info during the provisioning phase of the Swift application: • bx cf set-env <app_name> BP_DEBUG true 15 • Access your application using the Bluemix web console Kitura 16 Build Fast, Modern Microservices in Swift Introducing Kitura Write Server Applications in Swift • Empower native mobile developers to extend their development skills to the Cloud. • Deliver micro-services faster with Kitura’s easy-to-learn, lightweight, modular architecture. Integrate Apps with Backend Services • Leverage a collection of pre-built enterprise connectors including Cloudant, Redis, and Object Storage. A fast, simple to use web • Build with greater confidence through Swift’s technical framework for Server-Side underpinnings, including concurrency, type-safety, and low Swift memory profile. http://github.com/ibm-swift/kitura 17 BluePic 18 What is BluePic? • A sample application that allows you to take photos and share them with other BluePic users. • A cognitive engine enhances images uploaded by users: • Adds weather information (based on the location where the image was uploaded from). • Tags images based on their content. • Push notifications are sent to users once images have been augmented. • BluePic uses Swift for the implementation of all its components: • iOS application • Web server • Cloud functions 19 Architecture 20 IBM Cloud Capabilities App ID Push Watson Visual Notifications Recognition Cloud Functions 21 BluePic Demo! 22 Resources • Swift.org – https://swift.org/ • Swift@IBM Development Center – https://developer.ibm.com/swift/ • Buildpack for Swift – https://github.com/IBM-Swift/swift-buildpack/ • Docker images – https://github.com/IBM-Swift/swift-ubuntu-docker • Kitura Starter – https://github.com/IBM-Bluemix/Kitura-Starter • Cloud Foundry – https:// docs.cloudfoundry.org/devguide/deploy-apps/manifest.html#minimal-manifest • Introducing BluePic - https://developer.ibm.com/code/2016/12/15/introducing-bluepic/ • Transition to Server-Side Swift with BluePic - https ://developer.ibm.com/swift/2016/11/15/transition-to-server-side-swift-with-bluepic/ • BluePic journey - https://developer.ibm.com/code/journey/apply-cognitive-to-mobile-images-on- the-go/ • Get answers on our Slack organization: swift-at-ibm.slack.com 23 Questions? 24 25 Backup 26 Using Docker for Development & Testing • The ibmcom/swift-ubuntu image contains the Swift 3.0.2 RELEASE toolchain as well as the dependencies for running Kitura-based applications. • Our development team uses the ibmcom/swift-ubuntu image for development and testing of Swift 3 applications on the Linux Ubuntu (v14.04) operating system: • docker pull ibmcom/swift-ubuntu:latest • You can mount a folder on your host to your Docker container using the following command: • docker run -i -t -v <absolute path to the swift package>:/root/<swift package name> ibmcom/swift-ubuntu:latest • Exposing your server's port running in a Docker container to the host system (e.g. macOS) is quite easy using the latest version of Docker: 27 • docker run -p <host port>:<container port> [additional options] <image name>.