SlideShare a Scribd company logo
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

More Related Content

What's hot

Origins of Elixir programming language
Origins of Elixir programming languageOrigins of Elixir programming language
Origins of Elixir programming language
Pivorak MeetUp
 
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
Nina Zakharenko
 
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
Nina Zakharenko
 
Introduction to Ruby Programming Language
Introduction to Ruby Programming LanguageIntroduction to Ruby Programming Language
Introduction to Ruby Programming Language
Nicolò Calcavecchia
 
Licão 13 functions
Licão 13 functionsLicão 13 functions
Licão 13 functions
Acácio Oliveira
 
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
Alexis Gallagher
 
Ruby For Java Programmers
Ruby For Java ProgrammersRuby For Java Programmers
Ruby For Java Programmers
Mike Bowler
 
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
José Paumard
 
Scalar data types
Scalar data typesScalar data types
Introduction to Perl - Day 1
Introduction to Perl - Day 1Introduction to Perl - Day 1
Introduction to Perl - Day 1
Dave Cross
 
Perl programming language
Perl programming languagePerl programming language
Perl programming language
Elie Obeid
 
Subroutines
SubroutinesSubroutines
"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...
Fwdays
 
(Parameterized) Roles
(Parameterized) Roles(Parameterized) Roles
(Parameterized) Roles
sartak
 
Gigigo Ruby Workshop
Gigigo Ruby WorkshopGigigo Ruby Workshop
Gigigo Ruby Workshop
Alex Rupérez
 
Ruby from zero to hero
Ruby from zero to heroRuby from zero to hero
Ruby from zero to hero
Diego Lemos
 
Ruby
RubyRuby
Lists and arrays
Lists and arraysLists 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
Utkarsh Sengar
 
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
Jorge Ortiz
 

What's hot (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 to from Ruby to Objective-C

An introduction to Ruby
An introduction to RubyAn introduction to Ruby
An introduction to Ruby
Wes Oldenbeuving
 
jRuby: The best of both worlds
jRuby: The best of both worldsjRuby: The best of both worlds
jRuby: The best of both worlds
Christopher Spring
 
Reasons To Love Ruby
Reasons To Love RubyReasons To Love Ruby
Reasons To Love Ruby
Ben Scheirman
 
Ruby Programming
Ruby ProgrammingRuby Programming
Ruby Programming
Sadakathullah Appa College
 
Ruby 101
Ruby 101Ruby 101
Ruby 101
Harisankar P S
 
Ruby 入門 第一次就上手
Ruby 入門 第一次就上手Ruby 入門 第一次就上手
Ruby 入門 第一次就上手
Wen-Tien Chang
 
Ruby 程式語言入門導覽
Ruby 程式語言入門導覽Ruby 程式語言入門導覽
Ruby 程式語言入門導覽
Wen-Tien Chang
 
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
hwilming
 
Rakudo
RakudoRakudo
Rakudo
awwaiid
 
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)
Pavlo Baron
 
Ceylon idioms by Gavin King
Ceylon idioms by Gavin KingCeylon idioms by Gavin King
Ceylon idioms by Gavin King
UnFroMage
 
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 — An introduction
Ruby — An introductionRuby — An introduction
Ruby — An introduction
Gonçalo Silva
 
Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介
Wen-Tien Chang
 
Ruby - Uma Introdução
Ruby - Uma IntroduçãoRuby - Uma Introdução
Ruby - Uma Introdução
Ígor Bonadio
 
Jsphp 110312161301-phpapp02
Jsphp 110312161301-phpapp02Jsphp 110312161301-phpapp02
Jsphp 110312161301-phpapp02
Seri Moth
 
Using Regular Expressions and Staying Sane
Using Regular Expressions and Staying SaneUsing Regular Expressions and Staying Sane
Using Regular Expressions and Staying Sane
Carl Brown
 
Einführung in TypeScript
Einführung in TypeScriptEinführung in TypeScript
Einführung in TypeScript
Demian Holderegger
 
Play á la Rails
Play á la RailsPlay á la Rails
Play á la Rails
Sebastian Nozzi
 
"Javascript" por Tiago Rodrigues
"Javascript" por Tiago Rodrigues"Javascript" por Tiago Rodrigues

Similar to 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
 

More from Eddie Kao

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

More from 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讀書會(行前準備)
 

Recently uploaded

Public CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptxPublic CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptx
marufrahmanstratejm
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
Neo4j
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
saastr
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
Jason Yip
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
ScyllaDB
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
Tatiana Kojar
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
Javier Junquera
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
c5vrf27qcz
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
saastr
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 

Recently uploaded (20)

Public CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptxPublic CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptx
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Leveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and StandardsLeveraging the Graph for Clinical Trials and Standards
Leveraging the Graph for Clinical Trials and Standards
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 

from Ruby to Objective-C