SlideShare uma empresa Scribd logo
1 de 66
Baixar para ler offline
Stanford CS193p
Developing Applications for iOS
Fall 2013-14

Stanford CS193p
Fall 2013
Today
What is this class all about?
Description
Prerequisites
Homework / Final Project

iOS Overview
What’s in iOS?

MVC

Object-Oriented Design Concept

Objective C

(Time Permitting)
New language!
Basic concepts only for today.

Stanford CS193p
Fall 2013
What will I learn in this course?
How to build cool apps

Easy to build even very complex applications
Result lives in your pocket or backpack!
Very easy to distribute your application through the AppStore
Vibrant development community

Real-life Object-Oriented Programming

The heart of Cocoa Touch is 100% object-oriented
Application of MVC design model
Many computer science concepts applied in a commercial development platform:
Databases, Graphics, Multimedia, Multithreading, Animation, Networking, and much, much more!
Numerous students have gone on to sell products on the AppStore

Stanford CS193p
Fall 2013
Prerequisites
Most Important Prereq!

Object-Oriented Programming
CS106A&B (or X) required
CS107 or CS108 or CS110 required
(or equivalent for non-Stanford undergrad)

Object-Oriented Terms

Class (description/template for an object)
Instance (manifestation of a class)
Message (sent to object to make it act)
Method (code invoked by a Message)
Instance Variable (object-specific storage)
Superclass/Subclass (Inheritance)

You should know these terms!

If you are not very comfortable with all of these,
this might not be the class for you!

Programming Experience
This is an upper-level CS course.

If you have never written a program where you
had to design and implement more than a handful
of classes, this will be a big step up in difficulty
for you.

Stanford CS193p
Fall 2013
Assignments
Weekly Homework

6 weekly (approximately) assignments
Individual work only
Required Tasks and Evaluation criteria

Final Project

3 weeks to work on it
Individual work only
Keynote presentation required (2 mins or so)

Stanford CS193p
Fall 2013
What’s in iOS?
Core OS
OSX Kernel Power Management
Mach 3.0

Keychain Access

BSD

Certificates

Sockets

File System

Security

Bonjour

Stanford CS193p
Fall 2013
What’s in iOS?
Core Services
Collections

Core Location

Address Book Net Services
Networking

Threading

File Access

Preferences

SQLite

URL Utilities

Stanford CS193p
Fall 2013
What’s in iOS?
Media
Core Audio

JPEG, PNG, TIFF

OpenAL

PDF

Audio Mixing

Quartz (2D)

Audio Recording Core Animation
Video Playback

OpenGL ES

Stanford CS193p
Fall 2013
What’s in iOS?
Cocoa Touch
Multi-Touch

Alerts

Core Motion

Web View

View Hierarchy

Map Kit

Localization

Image Picker

Controls

Camera

Stanford CS193p
Fall 2013
Platform Components
Tools

Language

Xcode 5

[display setTextColor:[UIColor blackColor]];

e
or
C

Frameworks
Foundation
Design Strategies

s

nt
stru me
In

a
at
D

Ma
p

Cor
eM
otio
n
Kit

MVC

UIKit

Stanford CS193p
Fall 2013
MVC
Controller

Model

View

Divide objects in your program into 3 “camps.”
Stanford CS193p
Fall 2013
MVC
Controller

Model

View

Model = What your application is (but not how it is displayed)
Stanford CS193p
Fall 2013
MVC
Controller

Model

View

Controller = How your Model is presented to the user (UI logic)
Stanford CS193p
Fall 2013
MVC
Controller

Model

View

View = Your Controller’s minions
Stanford CS193p
Fall 2013
MVC
Controller

Model

View

It’s all about managing communication between camps
Stanford CS193p
Fall 2013
MVC
Controller

Model

View

Controllers can always talk directly to their Model.
Stanford CS193p
Fall 2013
MVC
Controller

Model

outlet

View

Controllers can also talk directly to their View.
Stanford CS193p
Fall 2013
MVC
Controller

Model

outlet

View

The Model and View should never speak to each other.
Stanford CS193p
Fall 2013
MVC
Controller

Model

outlet

?
View

Can the View speak to its Controller?
Stanford CS193p
Fall 2013
MVC
Controller

Model

outlet

View

Sort of. Communication is “blind” and structured.
Stanford CS193p
Fall 2013
MVC
target

Controller

Model

outlet

View

The Controller can drop a target on itself.
Stanford CS193p
Fall 2013
MVC
target

Controller

Model

action

outlet

View

Then hand out an action to the View.
Stanford CS193p
Fall 2013
MVC
target

Controller

outlet

action

Model

View

The View sends the action when things happen in the UI.
Stanford CS193p
Fall 2013
MVC
target

Controller

outlet

action
should

Model

will

did

View

Sometimes the View needs to synchronize with the Controller.
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller

outlet
g
le

de
e
at

Model

action

View

The Controller sets itself as the View’s delegate.
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller

outlet
g
le

de
e
at

Model

action

View

The delegate is set via a protocol (i.e. it’s “blind” to class).
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller

outlet
g
le

de
e
at

Model

action

View

Views do not own the data they display.
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller

outlet
g
le

de
e
at

Model

data
at

action

View

count

So, if needed, they have a protocol to acquire it.
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller
data
at

count

rc
e

e
at

so
u

g
le

Model

de

da
ta

outlet

action

View

Controllers are almost always that data source (not Model!).
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller
data
at

count

rc
e

e
at

so
u

g
le

Model

de

da
ta

outlet

action

View

Controllers interpret/format Model information for the View.
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller

so
u

rc
e

e
at

da
ta

outlet
g
le

Model

count

de

?

data
at

action

View

Can the Model talk directly to the Controller?
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller
data
at

count

rc
e

e
at

so
u

g
le

Model

de

da
ta

outlet

action

View

No. The Model is (should be) UI independent.
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller
data
at

count

rc
e

e
at

so
u

g
le

Model

de

da
ta

outlet

action

View

So what if the Model has information to update or something?
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller
data
at

rc
e

e
at

so
u

g
le

Model

da
ta

outlet
de

Notification
& KVO

count

action

View

It uses a “radio station”-like broadcast mechanism.
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller
data
at

rc
e

e
at

so
u

g
le

Model

da
ta

outlet
de

Notification
& KVO

count

action

View

Controllers (or other Model) “tune in” to interesting stuff.
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller
data
at

rc
e

e
at

so
u

g
le

Model

da
ta

outlet
de

Notification
& KVO

count

action

View

A View might “tune in,” but probably not to a Model’s “station.”
Stanford CS193p
Fall 2013
MVC
target

should
will

did

Controller
data
at

rc
e

e
at

so
u

g
le

Model

da
ta

outlet
de

Notification
& KVO

count

action

View

Now combine MVC groups to make complicated programs ...
Stanford CS193p
Fall 2013
MVCs working together

Stanford CS193p
Fall 2013
MVCs not working together

Stanford CS193p
Fall 2013
Objective-C
New language to learn!

Strict superset of C
Adds syntax for classes, methods, etc.
A few things to “think differently” about (e.g. properties, dynamic binding)

Most important concept to understand today: Properties

Usually we do not access instance variables directly in Objective-C.
Instead, we use “properties.”
A “property” is just the combination of a getter method and a setter method in a class.
The getter (usually) has the name of the property (e.g. “myValue”)
The setter’s name is “set” plus capitalized property name (e.g. “setMyValue:”)
(To make this look nice, we always use a lowercase letter as the first letter of a property name.)
We just call the setter to store the value we want and the getter to get it. Simple.

This is just your first glimpse of this language!
We’ll go much more into the details next week.
Don’t get too freaked out by the syntax at this point.

Stanford CS193p
Fall 2013
Objective-C

Card.h
Public Declarations

Card.m
Private Implementation

Stanford CS193p
Fall 2013
Objective-C

Card.h

Card.m

Its superclass.
@interface Card : NSObject

The name
of this class.

NSObject is the root class from which pretty

much all iOS classes inherit
(including the classes you author yourself).

Don’t forget this!
@end

Stanford CS193p
Fall 2013
Card.h

@interface Card : NSObject

Objective-C

Card.m

@implementation Card

Note, superclass is not specified here.

@end

@end

Stanford CS193p
Fall 2013
Card.h

Objective-C

Card.m

#import <Foundation/NSObject.h>

Superclass’s header file.
@interface Card : NSObject

@end

@implementation Card

@end

Stanford CS193p
Fall 2013
Objective-C

Card.h

Card.m

#import <Foundation/Foundation.h>

If the superclass is in iOS itself, we import the entire
@implementation Card
“framework” that includes the superclass.
In this case, Foundation, which contains basic non-UI objects like NSObject.

@interface Card : NSObject

@end

@end

Stanford CS193p
Fall 2013
Card.h

Objective-C

Card.m

@import Foundation;

In fact, in iOS 7 (only), there is special syntax for
@interface importing an entire framework called @import.
Card : NSObject

@end

@implementation Card

@end

Stanford CS193p
Fall 2013
Objective-C

Card.h

Card.m

#import <Foundation/Foundation.h>

@interface Card : NSObject

@implementation Card

However, the old framework importing
syntax is backwards-compatible in iOS 7.

@end

@end

Stanford CS193p
Fall 2013
Card.h
#import <Foundation/Foundation.h>

Objective-C

Card.m

#import "Card.h"

Our own header file must be imported
into our implementation file.
@interface Card : NSObject

@end

@implementation Card

@end

Stanford CS193p
Fall 2013
Card.h
#import <Foundation/Foundation.h>

Objective-C
#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@end

Card.m

Private declarations can go here.

@implementation Card

@end

Stanford CS193p
Fall 2013
Objective-C

Card.h
#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

@property (strong) NSString *contents;

In iOS, we don’t access instance variables directly.
Instead, we use an @property which declares two methods: a “setter” and a “getter”.
It is with those two methods that the @property’s instance variable is accessed
(both publicly and privately).
This particular @property is a pointer.
Specifically, a pointer to an object whose class is (or inherits from) NSString.
ALL objects live in the heap (i.e. are pointed to) in Objective-C!
Thus you would never have a property of type “NSString” (rather, “NSString *”).
Because this @property is in this class’s header file, it is public.
Its setter and getter can be called from outside this class’s @implementation block.
@end

@end

Stanford CS193p
Fall 2013
Objective-C

Card.h
#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

@property (strong) NSString *contents;

strong means:

“keep the object that this property points to
in memory until I set this property to nil (zero)
(and it will stay in memory until everyone who has a strong
pointer to it sets their property to nil too)”
weak would mean:
“if no one else has a strong pointer to this object,

then you can throw it out of memory
and set this property to nil
(this can happen at any time)”

@end

@end

Stanford CS193p
Fall 2013
Objective-C

Card.h
#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

@property (strong, nonatomic) NSString *contents;

nonatomic means:

“access to this property is not thread-safe”.
We will always specify this for object pointers in this course.
If you do not, then the compiler will generate locking code that
will complicate your code elsewhere.

@end

@end

Stanford CS193p
Fall 2013
Card.h

Objective-C

#import <Foundation/Foundation.h>

Card.m

#import "Card.h"

This @synthesize
@interface Card()
@end

is the line of code that actually creates the
backing instance variable that is set and gotten.
Notice that by default the backing variable’s name is the same as
the property’s name but with an underbar in front.

@interface Card : NSObject

@implementation Card

@property (strong, nonatomic) NSString *contents;

@synthesize contents = _contents;

This is the @property implementation that the
compiler generates automatically for you
(behind the scenes).
You are welcome to write the setter or getter
yourself, but this would only be necessary if you
needed to do something in addition to simply
setting or getting the value of the property.

@end

- (NSString *)contents
{
return _contents;
}
- (void)setContents:(NSString *)contents
{
_contents = contents;
}

@end

Stanford CS193p
Fall 2013
Card.h

Objective-C

#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

@property (strong, nonatomic) NSString *contents;

Because the compiler takes care of
everything you need to implement a
property, it’s usually only one line of code
(the @property declaration)
to add one to your class.

@end

@end

Stanford CS193p
Fall 2013
Objective-C

Card.h

Card.m

#import "Card.h"

#import <Foundation/Foundation.h>

@interface Card()

Notice no strong or weak here.
@end
Primitive types are not stored in the heap, so there’s no need to
specify how the storage for them in the heap is treated. @implementation
@interface Card : NSObject

Card

@property (strong, nonatomic) NSString *contents;
@property (nonatomic) BOOL chosen;
@property (nonatomic) BOOL matched;

Properties can be
any C type.
That includes int,
float, etc., even C
structs.

@end

Let’s look at some more properties.
These are not pointers.
They are simple BOOLs.

C does not define a “boolean” type.
This BOOL is an Objective-C typedef.
It’s values are YES or NO.

@end

Stanford CS193p
Fall 2013
Card.h

Objective-C

#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

@property (strong, nonatomic) NSString *contents;

@synthesize chosen = _chosen;
@synthesize matched = _matched;

@property (nonatomic) BOOL chosen;
@property (nonatomic) BOOL matched;

- (BOOL) chosen
{
return _chosen;
}
- (void)setChosen:(BOOL)chosen
{
_chosen = chosen;
}
- (BOOL) matched
{
return _matched;
}
- (void)setMatched:(BOOL)matched
{
_matched = matched;
}

@end

@end

Here’s what the compiler is
doing behind the scenes for
these two properties.

Stanford CS193p
Fall 2013
Objective-C

Card.h
#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()

@interface Card :

It is actually possible to change the name of the getter that is
@end
generated. The only time you’ll ever see that done in this class
(or anywhere probably) is boolean getters.
@implementation Card
NSObject

@property (strong, nonatomic) NSString *contents;
@property (nonatomic, getter=isChosen) BOOL chosen;
@property (nonatomic, getter=isMatched) BOOL matched;

This is done simply to make
the code “read” a little bit nicer.
You’ll see this in action later.

@end

@synthesize chosen = _chosen;
@synthesize matched = _matched;
- (BOOL)isChosen
Note change
{
return _chosen;
}
- (void)setChosen:(BOOL)chosen
{
_chosen = chosen;
}

in getter method.

- (BOOL)isMatched
Note change
{
return _matched;
}
- (void)setMatched:(BOOL)matched
{
_matched = matched;
}

in getter method.

@end

Stanford CS193p
Fall 2013
Card.h

Objective-C

#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

@property (strong, nonatomic) NSString *contents;
@property (nonatomic, getter=isChosen) BOOL chosen;
@property (nonatomic, getter=isMatched) BOOL matched;

Remember, unless you need to do something besides setting or
getting when a property is being set or gotten,
the implementation side of this will all happen automatically for you.

@end

@end

Stanford CS193p
Fall 2013
Objective-C

Card.h
#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

@property (strong, nonatomic) NSString *contents;

Enough properties for now.
Let’s take a getter=isChosen) BOOL
(nonatomic, look at defining methods. chosen;

@property
@property (nonatomic, getter=isMatched) BOOL matched;
- (int)match:(Card *)card;

Here’s the declaration of a public
method called match: which takes one
argument (a pointer to a Card) and
returns an integer.
What makes this method public?
Because we’ve declared it in the header file.

@end

@end

Stanford CS193p
Fall 2013
Objective-C

Card.h
#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

@property (strong, nonatomic) NSString *contents;
@property (nonatomic, getter=isChosen) BOOL chosen;
@property (nonatomic, getter=isMatched) BOOL matched;
- (int)match:(Card *)card;

- (int)match:(Card *)card
{
int score = 0;

Here’s the declaration of a public
method called match: which takes one
argument (a pointer to a Card) and
returns an integer.

match: is going to return a “score” which says how good a match
the passed card is to the Card that is receiving this message.

0 means “no match”, higher numbers mean a better match.

return score;
}

@end

@end

Stanford CS193p
Fall 2013
Card.h

Objective-C

#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

There’s a lot going on here!
For the first time, we are seeing the
“calling” side of properties (and methods).

@property (strong, nonatomic) NSString *contents;
@property (nonatomic, getter=isChosen) BOOL chosen;
@property (nonatomic, getter=isMatched) BOOL matched;
- (int)match:(Card *)card;

- (int)match:(Card *)card
{
int score = 0;
if ([card.contents isEqualToString:self.contents]) {
score = 1;
}
return score;
}

@end

@end

For this example, we’ll return 1 if the passed card has
the same contents as we do or 0 otherwise
(you could imagine more complex scoring).

Stanford CS193p
Fall 2013
Card.h

Objective-C

#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

@property (strong, nonatomic) NSString *contents;
@property (nonatomic, getter=isChosen) BOOL chosen;
@property (nonatomic, getter=isMatched) BOOL matched;
- (int)match:(Card *)card;

Notice that we are calling the “getter” for
the contents @property
(both on our self and on the passed card).
This calling syntax is called “dot notation.”
It’s only for setters and getters.

- (int)match:(Card *)card
{
int score = 0;
if ([card.contents isEqualToString:self.contents]) {
score = 1;
}
return score;
}

@end

@end

Stanford CS193p
Fall 2013
Objective-C

Card.h
#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()

@interface Card : NSObject

Recall that the contents
property is an NSString.

@end
@implementation Card

@property (strong, nonatomic) NSString *contents;
@property (nonatomic, getter=isChosen) BOOL chosen;
@property (nonatomic, getter=isMatched) BOOL matched;
- (int)match:(Card *)card;

- (int)match:(Card *)card
{
int score = 0;

isEqualToString: is an NSString method
which takes another NSString as an argument and
returns a BOOL (YES if the 2 strings are the same).

if ([card.contents isEqualToString:self.contents]) {
score = 1;
}

}

@end

Also, we see the “square bracket” notation we use to
return score; send a message to an object.
In this case, the message isEqualToString: is being sent
to the NSString returned by the contents getter.

@end

Stanford CS193p
Fall 2013
Card.h

Objective-C

#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

@property (strong, nonatomic) NSString *contents;
@property (nonatomic, getter=isChosen) BOOL chosen;
@property (nonatomic, getter=isMatched) BOOL matched;
- (int)match:(NSArray *)otherCards;

- (int)match:(NSArray *)otherCards
{
int score = 0;
if ([card.contents isEqualToString:self.contents]) {
score = 1;
}

We could make match: even more powerful by
allowing it to match against multiple cards by passing an
array of cards using the NSArray class in Foundation.

return score;
}

@end

@end

Stanford CS193p
Fall 2013
Card.h

Objective-C

#import <Foundation/Foundation.h>

Card.m

#import "Card.h"
@interface Card()
@end

@interface Card : NSObject

@implementation Card

We’ll implement a very simple match scoring system here which is
to score 1 point if ANY of the passed otherCards’ contents
match the receiving Card’s contents.
(You could imagine giving more points if multiple cards match.)

@property (strong, nonatomic) NSString *contents;
@property (nonatomic, getter=isChosen) BOOL chosen;
@property (nonatomic, getter=isMatched) BOOL matched;
- (int)match:(NSArray *)otherCards;

- (int)match:(NSArray *)otherCards
{
int score = 0;
for (Card *card in otherCards) {
if ([card.contents isEqualToString:self.contents]) {
score = 1;
}
}
return score;
}

@end

@end

Note the for-in looping syntax here.
This is called “fast enumeration.”
It works on arrays, dictionaries, etc.

Stanford CS193p
Fall 2013
Coming Up
Next Lecture

More of our Card Game Model
Xcode 5 Demonstration (start building our Card Game application)

Next Week

Finish off our Card Game application
Objective-C in more detail
Foundation (array, dictionary, etc.)
And much much more!

Stanford CS193p
Fall 2013

Mais conteúdo relacionado

Semelhante a Lecture 1 slides

Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan
 
Dot Net Fundamentals
Dot Net FundamentalsDot Net Fundamentals
Dot Net Fundamentals
LiquidHub
 
Minko - Targeting Flash/Stage3D with C++ and GLSL
Minko - Targeting Flash/Stage3D with C++ and GLSLMinko - Targeting Flash/Stage3D with C++ and GLSL
Minko - Targeting Flash/Stage3D with C++ and GLSL
Minko3D
 
Assignment1 B 0
Assignment1 B 0Assignment1 B 0
Assignment1 B 0
Mahmoud
 

Semelhante a Lecture 1 slides (20)

Performance #5 cpu and battery
Performance #5  cpu and batteryPerformance #5  cpu and battery
Performance #5 cpu and battery
 
Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2
 
Dot Net Fundamentals
Dot Net FundamentalsDot Net Fundamentals
Dot Net Fundamentals
 
(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net
 
Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...
Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...
Memulai Karir menjadi iOS Developer - Gilang ramadhan (Academy Content Writer...
 
Minko - Targeting Flash/Stage3D with C++ and GLSL
Minko - Targeting Flash/Stage3D with C++ and GLSLMinko - Targeting Flash/Stage3D with C++ and GLSL
Minko - Targeting Flash/Stage3D with C++ and GLSL
 
iOS,From Development to Distribution
iOS,From Development to DistributioniOS,From Development to Distribution
iOS,From Development to Distribution
 
iphone presentation
iphone presentationiphone presentation
iphone presentation
 
The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...
The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...
The Fine Art of Time Travelling - Implementing Event Sourcing - Andrea Saltar...
 
CS 354 Introduction
CS 354 IntroductionCS 354 Introduction
CS 354 Introduction
 
Build 2019 Recap
Build 2019 RecapBuild 2019 Recap
Build 2019 Recap
 
Creative Coders March 2013 - Introducing Starling Framework
Creative Coders March 2013 - Introducing Starling FrameworkCreative Coders March 2013 - Introducing Starling Framework
Creative Coders March 2013 - Introducing Starling Framework
 
Deployment Design Patterns - Deploying Machine Learning and Deep Learning Mod...
Deployment Design Patterns - Deploying Machine Learning and Deep Learning Mod...Deployment Design Patterns - Deploying Machine Learning and Deep Learning Mod...
Deployment Design Patterns - Deploying Machine Learning and Deep Learning Mod...
 
AllThingsOpen 2018 - Deployment Design Patterns (Dan Zaratsian)
AllThingsOpen 2018 - Deployment Design Patterns (Dan Zaratsian)AllThingsOpen 2018 - Deployment Design Patterns (Dan Zaratsian)
AllThingsOpen 2018 - Deployment Design Patterns (Dan Zaratsian)
 
iOS Dev Intro
iOS Dev IntroiOS Dev Intro
iOS Dev Intro
 
MobSecCon 2015 - Dynamic Analysis of Android Apps
MobSecCon 2015 - Dynamic Analysis of Android AppsMobSecCon 2015 - Dynamic Analysis of Android Apps
MobSecCon 2015 - Dynamic Analysis of Android Apps
 
iPhone development from a Java perspective (Jazoon '09)
iPhone development from a Java perspective (Jazoon '09)iPhone development from a Java perspective (Jazoon '09)
iPhone development from a Java perspective (Jazoon '09)
 
Resume
ResumeResume
Resume
 
Assignment1 B 0
Assignment1 B 0Assignment1 B 0
Assignment1 B 0
 
Lunch and learn as3_frameworks
Lunch and learn as3_frameworksLunch and learn as3_frameworks
Lunch and learn as3_frameworks
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 

Lecture 1 slides