Public speaking course notes Read "Dynamo, Amazon’s Highly Available Key-value Store" Read "Bigtable, A Distributed Storage System for Structured Data" Read "Streaming Systems" 3, Watermarks Read "Streaming Systems" 1&2, Streaming 101 Read "F1, a distributed SQL database that scales" Read "Zanzibar, Google’s Consistent, Global Authorization System" Read "Spanner, Google's Globally-Distributed Database" Read "Designing Data-intensive applications" 12, The Future of Data Systems IOS development with Swift Read "Designing Data-intensive applications" 10&11, Batch and Stream Processing Read "Designing Data-intensive applications" 9, Consistency and Consensus Read "Designing Data-intensive applications" 8, Distributed System Troubles Read "Designing Data-intensive applications" 7, Transactions Read "Designing Data-intensive applications" 6, Partitioning Read "Designing Data-intensive applications" 5, Replication Read "Designing Data-intensive applications" 3&4, Storage, Retrieval, Encoding Read "Designing Data-intensive applications" 1&2, Foundation of Data Systems Three cases of binary search TAMU Operating System 2 Memory Management TAMU Operating System 1 Introduction Overview in cloud computing 2 TAMU Operating System 7 Virtualization TAMU Operating System 6 File System TAMU Operating System 5 I/O and Disk Management TAMU Operating System 4 Synchronization TAMU Operating System 3 Concurrency and Threading TAMU Computer Networks 5 Data Link Layer TAMU Computer Networks 4 Network Layer TAMU Computer Networks 3 Transport Layer TAMU Computer Networks 2 Application Layer TAMU Computer Networks 1 Introduction Overview in distributed systems and cloud computing 1 A well-optimized Union-Find implementation, in Java A heap implementation supporting deletion TAMU Advanced Algorithms 3, Maximum Bandwidth Path (Dijkstra, MST, Linear) TAMU Advanced Algorithms 2, B+ tree and Segment Intersection TAMU Advanced Algorithms 1, BST, 2-3 Tree and Heap TAMU AI, Searching problems Factorization Machine and Field-aware Factorization Machine for CTR prediction TAMU Neural Network 10 Information-Theoretic Models TAMU Neural Network 9 Principal Component Analysis TAMU Neural Network 8 Neurodynamics TAMU Neural Network 7 Self-Organizing Maps TAMU Neural Network 6 Deep Learning Overview TAMU Neural Network 5 Radial-Basis Function Networks TAMU Neural Network 4 Multi-Layer Perceptrons TAMU Neural Network 3 Single-Layer Perceptrons Princeton Algorithms P1W6 Hash Tables & Symbol Table Applications Stanford ML 11 Application Example Photo OCR Stanford ML 10 Large Scale Machine Learning Stanford ML 9 Anomaly Detection and Recommender Systems Stanford ML 8 Clustering & Principal Component Analysis Princeton Algorithms P1W5 Balanced Search Trees TAMU Neural Network 2 Learning Processes TAMU Neural Network 1 Introduction Stanford ML 7 Support Vector Machine Stanford ML 6 Evaluate Algorithms Princeton Algorithms P1W4 Priority Queues and Symbol Tables Stanford ML 5 Neural Networks Learning Princeton Algorithms P1W3 Mergesort and Quicksort Stanford ML 4 Neural Networks Basics Princeton Algorithms P1W2 Stack and Queue, Basic Sorts Stanford ML 3 Classification Problems Stanford ML 2 Multivariate Regression and Normal Equation Princeton Algorithms P1W1 Union and Find Stanford ML 1 Introduction and Parameter Learning

IOS development with Swift

2019-01-16

1 Basics

Check out the Swift Guide.

IOS layers:

  • Cocoa Touch
    • Web View, Controls, Camera, Image Picker, etc
  • Media
    • Audio, JPEG, etc
  • Core Services
    • Collections, Networking, File, Threading, etc
  • Core OS
    • OSX Kernel

Demo

  • Edit UI in storyboard.
  • Connect UI and controller functions or variables by hold Control and drag.
    • Connection can be
      • Action: a function
      • Outlet: a special var of a thing in UI
      • Outlet collection: an array var of UI things
        • Use yellow View Controller to add into the array.
  • Right click on UI component to check connections.
  • Hold Option and click function names to check document.
  • Command click connection var to jump to def or refactor.
  • Get real value from optional: let n = arr.index(of: x)!
    • better: if let n = arr.index(of: x) {}
class ViewController: UIViewController // inheritance
{
    var count : Int = 0  { // instance var 
        didSet {
            // to be executed when set this var
            flipCountLabel.text = "Flips: \(count)" // embed variables in string
        }
    }

    var num = 2.0 // works too

    // Each argument has two name: external and internal; can be only one
    func flipCard(withEmoji emoji: String, on button: UIButton) {
        // ...
    }
}

2 MVC

A single MVC can only manage at most a single screen.

  • Model is what the application is; UI independent.
  • Controller: interpret/format model info for the view.
    • Controllers are almost always the data source.
    • View action to controller target.
    • Delegation: should, will, did.
    • Data source
  • View: generic UI components.

  • Controller can talk to model.
  • Model can use Notification & KVO to broadcast changes to Controller.
  • Controller can outlet to view.
  • View to controller
    • View action to controller target.
    • Delegation: should, will, did.
    • Data source

Create a class: File -> New -> File -> Swift File

  • class
    • Reference type
    • Initializer is needed when we have uninitialized vars.
  • struct
    • Value type, get copied when assigned or passed
    • No inheritance
    • Include free initializer
// class
class Concentration 
{
    var cards = Array<Card>() // init; or [Card]()

    func chooseCard(at index: Int) {

    }

    init(numCards: Int) {
        for id in 0..<numCards { // ..< means not including, ... means including
            let card = Card(id: id)
            cards.append(card)
            cards.append(card) // copied
            // or
            cards += [card, card]
        }
    }
}

// struct
struct Card
{
    var isFaceUp = false
    var isMatched = false
    var id: Int
    static var idFactory = 0
    static func getUniqId() -> Int {
        Card.idFactory += 1
        return Card.idFactory
    }
    init() {
        self.id = getUniqId()
    }
}

// in ViewController
class ViewController: UIViewController 
{
    // lazy allows init this var only when using it
    // no didSet() for lazy
    lazy var game = Concentration() // create a model

    var emoji = Dictionary<Int, String>() // dict
    // or
    var emoji = [Int: String]()

    func updateViewFromModel() {
        for index in cardButtons.indices {
            // ...
        }
    }

    func emoji(for card: Card) -> String {
        if emoji[card.id] == nil {
            let randInd = Int(arc4random_uniform(UInt32(emojiFactory.count)))
            emoji[card.id] = emojiFactory.remove(at: randInd)
        }
        return emoji[card.id] ?? "?"
    }
}

Creative Commons License
Melon blog is created by melonskin. This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
© 2016-2024. All rights reserved by melonskin. Powered by Jekyll.