SlideShare una empresa de Scribd logo
1 de 95
Descargar para leer sin conexión
from Ruby to Objective-C
I’m a Flash guy (≈ 9 years)
I’m a Python guy (≈ 3 years)
I’m a Ruby guy (≈ 5 years)
I’m a iOS app guy (≈ 3 years)
Ruby > Rails
Current Status
80% iOS app, 20% Ruby/Rails
100% Ruby Lover!
Rails Girls Taipei
Rails Girls Taipei
WebConf Taiwan 2014
Today, I’m NOT talking about..
how to use Ruby to write iOS app!
I’m going to talk about..
what I learned in Ruby…
and move to Objective-C
after all, our life, time and
resources are limited
what about Objective-C?
Objective-C …
“it has god dame long method name
and weird parameters!”
NSArray* languages = [NSArray arrayWithObjects:@"Ruby", @"PHP",
@"Objective-C", nil];
!
[languages enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL
*stop) {
NSLog(@"language = %@", obj);
}];
Objective-C …
“what the hell is the square bracket!”
NSString* myName = @"eddie kao";
NSLog(@"%@", [myName uppercaseString]);
Objective-C …
“WTF! my app crashed again!!”
Introduction
Ruby was born on 1993
Objective-C was born on 1983
they have the same ancestor
Smalltalk
photo by Marcin Wichary
Ruby is general-purpose
Objective-C mainly used in
Mac/iOS app development
Ruby != Rails
Objective-C != Cocoa Framework
they have something in common..
both Ruby and Objective-C are
Object-Oriented
both Ruby and Objective-C are
strongly typed language.
Ruby is a dynamic language
Objective-C is a dynamic language
both Ruby and Objective-C are
Dynamic Typing
Type checking..
- (void) makeSomeNoise:(id) sender
{
if ([sender isKindOfClass:[RobberDuck class]])
{
RobberDuck* duck = (RobberDuck *) sender;
[duck quack];
}
}
or you can do this..
- (void) makeSomeNoise:(id) sender
{
if ([sender respondsToSelector:@selector(quack)])
{
[sender quack];
}
}
id
Objective-C is superset of C
Objective-C is still C
NSString, NSArray, NSNumber…
NextSTEP
CF… = Core Foundation
CG… = Core Graphic
CL… = Core Location
CA… = Core Animation
UI… = User Interface
OOP
everything in Ruby is an object…
and almost everything in
Objective-C is an objects..
there’re still some primitive data
types in Objective-C
object model
class Animal
end
!

class Dog < Animal
end
object model
dog = Dog.new
!

puts "class of dog is #{dog.class}”
# Dog
puts "superclass of dog is #{dog.class.superclass}” # Animal
puts "super superclass of dog is
#{dog.class.superclass.superclass}”
# Object
puts "super super superclass of dog is
#{dog.class.superclass.superclass.superclass}” # BasicObject
!

puts
puts
puts
puts

"class
"class
"class
"class

of Dog is #{Dog.class}”
class of Dog is #{Dog.class.class}”
of Animal is #{Animal.class}”
of Object is #{Object.class}”

#
#
#
#

Class
Class
Class
Class
object model
@interface Animal : NSObject
@end
!

@implementation Animal
@end
!

@interface Dog : Animal
@end
!

@implementation Dog
@end
object model
Dog* dog = [[Dog alloc] init];
!
NSLog(@"class of dog is %@", [dog class]); # Dog
!
NSLog(@"superclass of dog is %@", [dog superclass]); # Animal
!
NSLog(@"super superclass of dog is %@", [[dog superclass] superclass]); #
NSObject
!
NSLog(@"super super superclass of dog is %@", [[[dog superclass]
superclass] superclass]); # null
Object Model
reference: http://goo.gl/wYL6gT
method & message
method definition
def say_hello(someone, message)
puts "Hello #{someone}, #{message}"
end

- (void) sayHello:(id)someOne withMessage:(NSString *)message
{
NSLog(@"Hello %@, %@", someOne, message);
}
sending message
dog.walk()

[dog walk];

# or you can omit the parentheses
sending message
fox.say_something "hi, Ruby"

[fox saySomething:@"hi, Ruby"];

# what does the fox say?
sending message
puts 1 + 2

puts 1.+(2)

puts 1.send(:+, 2)
sending message
class Bank
def save(money)
puts "you just saved #{money} dollars"
end
end
!

bank = Bank.new
bank.save 20
bank.send(:save, 20)

# you just saved 20 dollars
# you just saved 20 dollars
sending message
@interface Bank : NSObject
- (void) save:(NSNumber *) money;
@end
!

@implementation Bank
- (void)save:(NSNumber *)money
{
NSLog(@"you just saved %@ dollars", money);
}
@end
!

Bank* bank = [[Bank alloc] init];
[bank save:@20];
[bank performSelector:@selector(save:) withObject:@20];
block
block
p1 = Proc.new { puts "Hello, Proc Block" }
p1.call
!

p2 = lambda { puts "Hello, Lambda Block" }
p2.call
block
^{ };
block
typedef void (^MyBlock)(void);
int age = 18;
MyBlock theBlock = ^{
NSLog(@"Hello, Objective-C Block, your age = %d", age);
};
!

theBlock();

# Hello, Objective-C Block, your age = 18

!

age = 38;
theBlock();

# guess what’s the age?
block
3.times { |i| puts i }

NSArray* list = @[@1, @2, @3];
[list enumerateObjectsUsingBlock:^(NSNumber* num,
NSUInteger idx, BOOL *stop) {
NSLog(@"%@", num);
}];
iteration
iteration
list = [1, 2, 3, 4, 5]
!

sum = 0
!

list.each { |num|
sum += num
}
!

puts "sum = #{sum}"
iteration
NSArray* list = @[@1, @2, @3, @4, @5];
!

__block int sum = 0;
!

[list enumerateObjectsUsingBlock:^(NSNumber* num,
NSUInteger idx, BOOL *stop) {
sum += [num intValue];
}];
!

NSLog(@"sum = %d", sum);
iteration
class Fox
def say
puts "what does the fox say?"
end
end
!

fox1 = Fox.new
fox2 = Fox.new
fox3 = Fox.new
foxes = [fox1, fox2, fox3]
!

foxes.map { |fox| fox.say }
# what does the fox say?
iteration
@interface Fox : NSObject
- (void) say;
@end
!

@implementation Fox
- (void) say
{
NSLog(@"what does the fox say?!");
}
@end
iteration
Fox* fox1 = [[Fox alloc] init];
Fox* fox2 = [[Fox alloc] init];
Fox* fox3 = [[Fox alloc] init];
!

NSArray* foxes = @[fox1, fox2, fox3];
!

[foxes makeObjectsPerformSelector:@selector(say)];
add methods at runtime
Open class
class String
def is_awesome?
return true if self == "Ruby Tuesday"
end
end
!

puts "Ruby Tuesday".is_awesome?
Category
@interface NSString(RubyTuesday)
- (BOOL) isAwesome;
@end
!

@implementation NSString(RubyTuesday)
- (BOOL) isAwesome
{
if ([self isEqualToString:@"Ruby Tuesday"]){
return YES;
}
return NO;
}
@end
Category
NSString* meetup = @"Ruby Tuesday";
if ([meetup isAwesome])
{
NSLog(@"AWESOME!");
}
<objc/runtime.h>
Working with Classes
class_getName
class_getSuperclass
class_getInstanceVariable
class_getClassVariable
class_addIvar
class_copyIvarList
class_addMethod
class_getInstanceMethod
class_getClassMethod
class_replaceMethod
class_respondsToSelector
..

reference: http://goo.gl/BEikIM
<objc/runtime.h>
Working with Instances
object_copy
object_dispose
object_setInstanceVariable
object_getInstanceVariable
object_getIndexedIvars
object_getIvar
object_setIvar
object_getClassName
object_getClass
object_setClass
..

reference: http://goo.gl/BEikIM
reflection
-

(BOOL)
(BOOL)
(BOOL)
(BOOL)
..

isKindOfClass:(Class) aClass
isMemberOfClass:(Class) aClass
respondsToSelector:(SEL) aSelector
conformsToProtocol:(Protocol *) aProtocol

reference: http://goo.gl/fgmJcg
ecosystem
open source projects on Github
Ruby : 76,574
Objective-C : 22,959
Ruby : bundler
source 'https://rubygems.org'
!

gem 'rails', '3.2.8'
gem 'mysql2'
!

group :assets do
gem 'sass-rails',
'~> 3.2.3'
gem "bootstrap-sass"
end
!

gem
gem
gem
gem

"kaminari"
"simple_form"
"carrierwave"
'unicorn'
Objective-C : cocoapods
platform :ios, '6.0'
!

pod
pod
pod
pod
pod
pod

'Facebook-iOS-SDK', '~> 3.5.1’
'JSONKit', '~> 1.5pre'
'MagicalRecord', '~> 2.0.7’
'SSKeychain', '~> 0.1.4’
'TestFlightSDK', '~> 1.1'
'SMCalloutView', '~> 1.1.2'

!

target :UnitTests do
link_with 'UnitTests'
pod 'OCMock', '~> 2.0.1'
pod 'OCHamcrest', '~> 1.9'
end
IMHO
Objective-C is not really hard to
learn…
the actual difficult part in iOS app
development is Cocoa Framework
Objective-C would be almost
useless without Cocoa Framework
Ruby without Rails?!
design patterns
MVC

observer
notifications singleton
delegation
command
composite
target-action

proxy
C
what else..
photoed by JD Hancock
Flash Display Hierarchy
reference: http://goo.gl/2mzyMY
UIKit and AppKit framework Hierarchy
reference: http://goo.gl/xhS7m7
Views
reference: http://goo.gl/xhS7m7
Views
reference: http://goo.gl/xhS7m7
and I read Ruby source code..
my iOS app dev experience
= Ruby + C + Flash/AS3
=

+
Contacts
⾼高⾒見⻯⿓龍

Website

http://www.eddie.com.tw

Blog

http://blog.eddie.com.tw

Plurk

http://www.plurk.com/aquarianboy

Facebook

http://www.facebook.com/eddiekao

Google Plus

http://www.eddie.com.tw/+

Twitter

https://twitter.com/#!/eddiekao

Email

eddie@digik.com.tw

Mobile

+886-928-617-687

photo by Eddie

Más contenido relacionado

La actualidad más candente

Perl programming language
Perl programming languagePerl programming language
Perl programming language
Elie Obeid
 
Perl 101 - The Basics of Perl Programming
Perl  101 - The Basics of Perl ProgrammingPerl  101 - The Basics of Perl Programming
Perl 101 - The Basics of Perl Programming
Utkarsh Sengar
 

La actualidad más candente (20)

Origins of Elixir programming language
Origins of Elixir programming languageOrigins of Elixir programming language
Origins of Elixir programming language
 
Elegant Solutions For Everyday Python Problems - PyCon Canada 2017
Elegant Solutions For Everyday Python Problems - PyCon Canada 2017Elegant Solutions For Everyday Python Problems - PyCon Canada 2017
Elegant Solutions For Everyday Python Problems - PyCon Canada 2017
 
Elegant Solutions for Everyday Python Problems Pycon 2018 - Nina Zakharenko
Elegant Solutions for Everyday Python Problems Pycon 2018 - Nina ZakharenkoElegant Solutions for Everyday Python Problems Pycon 2018 - Nina Zakharenko
Elegant Solutions for Everyday Python Problems Pycon 2018 - Nina Zakharenko
 
Introduction to Ruby Programming Language
Introduction to Ruby Programming LanguageIntroduction to Ruby Programming Language
Introduction to Ruby Programming Language
 
Licão 13 functions
Licão 13 functionsLicão 13 functions
Licão 13 functions
 
Swift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-CSwift, functional programming, and the future of Objective-C
Swift, functional programming, and the future of Objective-C
 
Ruby For Java Programmers
Ruby For Java ProgrammersRuby For Java Programmers
Ruby For Java Programmers
 
JFokus 50 new things with java 8
JFokus 50 new things with java 8JFokus 50 new things with java 8
JFokus 50 new things with java 8
 
Scalar data types
Scalar data typesScalar data types
Scalar data types
 
Introduction to Perl - Day 1
Introduction to Perl - Day 1Introduction to Perl - Day 1
Introduction to Perl - Day 1
 
Perl programming language
Perl programming languagePerl programming language
Perl programming language
 
Subroutines
SubroutinesSubroutines
Subroutines
 
"How was it to switch from beautiful Perl to horrible JavaScript", Viktor Tur...
"How was it to switch from beautiful Perl to horrible JavaScript", Viktor Tur..."How was it to switch from beautiful Perl to horrible JavaScript", Viktor Tur...
"How was it to switch from beautiful Perl to horrible JavaScript", Viktor Tur...
 
(Parameterized) Roles
(Parameterized) Roles(Parameterized) Roles
(Parameterized) Roles
 
Gigigo Ruby Workshop
Gigigo Ruby WorkshopGigigo Ruby Workshop
Gigigo Ruby Workshop
 
Ruby from zero to hero
Ruby from zero to heroRuby from zero to hero
Ruby from zero to hero
 
Ruby
RubyRuby
Ruby
 
Lists and arrays
Lists and arraysLists and arrays
Lists and arrays
 
Perl 101 - The Basics of Perl Programming
Perl  101 - The Basics of Perl ProgrammingPerl  101 - The Basics of Perl Programming
Perl 101 - The Basics of Perl Programming
 
7 Stages of Unit Testing in iOS
7 Stages of Unit Testing in iOS7 Stages of Unit Testing in iOS
7 Stages of Unit Testing in iOS
 

Similar a from Ruby to Objective-C

Ruby 入門 第一次就上手
Ruby 入門 第一次就上手Ruby 入門 第一次就上手
Ruby 入門 第一次就上手
Wen-Tien Chang
 
Ruby 程式語言入門導覽
Ruby 程式語言入門導覽Ruby 程式語言入門導覽
Ruby 程式語言入門導覽
Wen-Tien Chang
 
What I learned from Seven Languages in Seven Weeks (IPRUG)
What I learned from Seven Languages in Seven Weeks (IPRUG)What I learned from Seven Languages in Seven Weeks (IPRUG)
What I learned from Seven Languages in Seven Weeks (IPRUG)
Kerry Buckley
 
Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介
Wen-Tien Chang
 
Jsphp 110312161301-phpapp02
Jsphp 110312161301-phpapp02Jsphp 110312161301-phpapp02
Jsphp 110312161301-phpapp02
Seri Moth
 

Similar a from Ruby to Objective-C (20)

An introduction to Ruby
An introduction to RubyAn introduction to Ruby
An introduction to Ruby
 
jRuby: The best of both worlds
jRuby: The best of both worldsjRuby: The best of both worlds
jRuby: The best of both worlds
 
Reasons To Love Ruby
Reasons To Love RubyReasons To Love Ruby
Reasons To Love Ruby
 
Ruby Programming
Ruby ProgrammingRuby Programming
Ruby Programming
 
Ruby 101
Ruby 101Ruby 101
Ruby 101
 
Ruby 入門 第一次就上手
Ruby 入門 第一次就上手Ruby 入門 第一次就上手
Ruby 入門 第一次就上手
 
Ruby 程式語言入門導覽
Ruby 程式語言入門導覽Ruby 程式語言入門導覽
Ruby 程式語言入門導覽
 
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
Exploring Ceylon with Gavin King - JUG BB Talk - Belrin 2014
 
Rakudo
RakudoRakudo
Rakudo
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
Ceylon idioms by Gavin King
Ceylon idioms by Gavin KingCeylon idioms by Gavin King
Ceylon idioms by Gavin King
 
What I learned from Seven Languages in Seven Weeks (IPRUG)
What I learned from Seven Languages in Seven Weeks (IPRUG)What I learned from Seven Languages in Seven Weeks (IPRUG)
What I learned from Seven Languages in Seven Weeks (IPRUG)
 
Ruby — An introduction
Ruby — An introductionRuby — An introduction
Ruby — An introduction
 
Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介
 
Ruby - Uma Introdução
Ruby - Uma IntroduçãoRuby - Uma Introdução
Ruby - Uma Introdução
 
Jsphp 110312161301-phpapp02
Jsphp 110312161301-phpapp02Jsphp 110312161301-phpapp02
Jsphp 110312161301-phpapp02
 
Using Regular Expressions and Staying Sane
Using Regular Expressions and Staying SaneUsing Regular Expressions and Staying Sane
Using Regular Expressions and Staying Sane
 
Einführung in TypeScript
Einführung in TypeScriptEinführung in TypeScript
Einführung in TypeScript
 
Play á la Rails
Play á la RailsPlay á la Rails
Play á la Rails
 
"Javascript" por Tiago Rodrigues
"Javascript" por Tiago Rodrigues"Javascript" por Tiago Rodrigues
"Javascript" por Tiago Rodrigues
 

Más de Eddie Kao (20)

Rails girls in Taipei
Rails girls in TaipeiRails girls in Taipei
Rails girls in Taipei
 
Rails Girls in Taipei
Rails Girls in TaipeiRails Girls in Taipei
Rails Girls in Taipei
 
Let's Learn Ruby - Basic
Let's Learn Ruby - BasicLet's Learn Ruby - Basic
Let's Learn Ruby - Basic
 
iOS app development and Open Source
iOS app development and Open SourceiOS app development and Open Source
iOS app development and Open Source
 
Vim
VimVim
Vim
 
Code Reading
Code ReadingCode Reading
Code Reading
 
CreateJS - from Flash to Javascript
CreateJS - from Flash to JavascriptCreateJS - from Flash to Javascript
CreateJS - from Flash to Javascript
 
May the source_be_with_you
May the source_be_with_youMay the source_be_with_you
May the source_be_with_you
 
Why I use Vim
Why I use VimWhy I use Vim
Why I use Vim
 
There is something about Event
There is something about EventThere is something about Event
There is something about Event
 
Flash Ecosystem and Open Source
Flash Ecosystem and Open SourceFlash Ecosystem and Open Source
Flash Ecosystem and Open Source
 
Happy Programming with CoffeeScript
Happy Programming with CoffeeScriptHappy Programming with CoffeeScript
Happy Programming with CoffeeScript
 
Ruby without rails
Ruby without railsRuby without rails
Ruby without rails
 
CoffeeScript-Ruby-Tuesday
CoffeeScript-Ruby-TuesdayCoffeeScript-Ruby-Tuesday
CoffeeScript-Ruby-Tuesday
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
API Design
API DesignAPI Design
API Design
 
測試
測試測試
測試
 
3rd AS Study Group
3rd AS Study Group3rd AS Study Group
3rd AS Study Group
 
iOS Game Development with Cocos2d
iOS Game Development with Cocos2diOS Game Development with Cocos2d
iOS Game Development with Cocos2d
 
AS3讀書會(行前準備)
AS3讀書會(行前準備)AS3讀書會(行前準備)
AS3讀書會(行前準備)
 

Ú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)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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...
 
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
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
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
 
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 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
 
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
 
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
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
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
 

from Ruby to Objective-C