SlideShare una empresa de Scribd logo
1 de 36
Cappuccino
 An “awesome” web framework


               flickr.com/kubina
What is Cappuccino?
   Apart from a delicious beverage




flickr.com/longo
What is Cappuccino?
   Apart from a delicious beverage




                                     ๏ Objective-C style coding
                                     ๏ create desktop-like web apps
                                     ๏ No CSS, HTML or DOM
                                     ๏ No compilation
                                     ๏ No plugins required
                                     ๏ Runs client side
                                     ๏ AJAX calls to remote server
flickr.com/longo
Quick and dirty
      Let’s get cappuccino




      flickr.com/stinkiepinkie_infinity
Quick and dirty
                                          Let’s get cappuccino




๏ Go to cappuccino.org/starter
๏ Unzip the package
๏ Go to the NewApplication folder
๏ Open index.html to start
๏ Start developing!                       flickr.com/stinkiepinkie_infinity
flickr.com/digitalcolony




The folder structure
            Help, I can’t find my files...
flickr.com/digitalcolony

                                           ‣ AppFolder/
                                             ‣ Frameworks/
                                             ‣ Resources/
                                             - index.html
                                             - index-debug.html
                                             - Info.plist
                                             - main.j
                                             - AppController.j
The folder structure
            Help, I can’t find my files...
Objective-J
How to write some Cocoa like code


                 flickr.com/sondyaustin
user.setName(“Jake”);
‣ [user setName:”Jake”];

  user.setNameAndAge(“Jake”, 12];
‣ [user setName:”Jake” andAge:12];

  User.getList();
‣ [User list];
                                     Objective-J
                                     How to write some Cocoa like code


                                                      flickr.com/sondyaustin
flickr.com/cgc



Now let’s write a class
It’s like Cocoa, but different!
flickr.com/cgc



Now let’s write a class
                                       A Objective-J class
It’s like Cocoa, but different!
                                  @import <Foundation/CPObject.j>
                                  @import “... .j”
                                  @implement MyClass : CPObject
                                  {
                                      CPString objectString;
                                  }
                                  - (void)methodNameWithParam:(CPString)text
                                  { ... }
                                  + (void)staticMethod
                                  { ... }
                                  @end
flickr.com/cgc



Now let’s write a class
                                                       A Objective-J class
It’s like Cocoa, but different!
                                                  @import <Foundation/CPObject.j>
                                                  @import “... .j”
                                                  @implement MyClass : CPObject
                                                  {
                                                      CPString objectString;
                                                  }
                                                  - (void)methodNameWithParam:(CPString)text
                                                  { ... }

   Use an object and it’s methods                 + (void)staticMethod
          var object = [[MyClass alloc] init];    { ... }
          [object methodNameWithParam:”good!”];   @end
flickr.com/cgc



Now let’s write a class
                                                          A Objective-J class
It’s like Cocoa, but different!
                                                     @import <Foundation/CPObject.j>
                                                     @import “... .j”
                                       Accessors
 CPString objectString @accessors;                   @implement MyClass : CPObject
                                                     {
 - (void)setObjectString:(CPString)value {...}           CPString objectString;
 - (CPString)objectString { return objectString; }   }
                                                     - (void)methodNameWithParam:(CPString)text
                                                     { ... }

   Use an object and it’s methods                    + (void)staticMethod
          var object = [[MyClass alloc] init];       { ... }
          [object methodNameWithParam:”good!”];      @end
flickr.com/cgc



Now let’s write a class
It’s like Cocoa, but different!
flickr.com/cgc



Now let’s write a class                 Variables
                                  ...
It’s like Cocoa, but different!
                                  globalVariable = “global variable”
                                  var fileVariable = “file scoped variable”
                                  @implement MyClass : CPObject
                                  { CPString objectVariable; }
                                  - (void)method
                                  {
                                        objectVariable = “object variable”;
                                        var functionVariable = “function variable”;
                                        aNewGlobalVariable = “another global variable”;
                                  }
                                  @end
flickr.com/cgc



Now let’s write a class                                         Variables
                                                          ...
It’s like Cocoa, but different!
                                                          globalVariable = “global variable”
                                                          var fileVariable = “file scoped variable”
                                                          @implement MyClass : CPObject
                                                          { CPString objectVariable; }
                                                          - (void)method
                                             Categories
        @implementation CPString (MyImplementation)       {
        - (CPString)upper                                       objectVariable = “object variable”;
        {                                                       var functionVariable = “function variable”;
            return [self uppercaseString];                      aNewGlobalVariable = “another global variable”;
        }                                                 }
        @end                                              @end
flickr.com/jdebner



      Go and delegate!
You’re like the boss that delegates everything
flickr.com/jdebner



      Go and delegate!
You’re like the boss that delegates everything




                                                 ๏ Customize behavior without subclassing
                                                 ๏ Move event handling to other class
                                                 ๏ @selector to pass a method as a
                                                   parameter
flickr.com/jdebner



      Go and delegate!
You’re like the boss that delegates everything
flickr.com/jdebner



      Go and delegate!
You’re like the boss that delegates everything




                               Calling class that sets the delegate
                                  var request = [CPURLRequest requestWithURL:"http://www.fousa.be/articles.json"];
                                  [request setHTTPMethod:"GET"];
                                  connection = [CPURLConnection connectionWithRequest:request delegate:self];
flickr.com/jdebner



      Go and delegate!
You’re like the boss that delegates everything




                               Calling class that sets the delegate
                                  var request = [CPURLRequest requestWithURL:"http://www.fousa.be/articles.json"];
                                  [request setHTTPMethod:"GET"];
                                  connection = [CPURLConnection connectionWithRequest:request delegate:self];



                                The delegate class
                                  - (void)connection:(CPURLConnection)myConnection didReceiveData:(CPString)data

                                  - (void)connection:(CPURLConnection)connection didFailWithError:(CPString)error

                                  - (void)connectionDidFinishLoading:(CPURLConnection)connection
flickr.com/pandiyan




                     Where is my memory?
                               This is some weird shit...
flickr.com/pandiyan




                                     Where is my memory?
                                               This is some weird shit...




  ๏ Garbage collection
  ๏ No retain / release
  ๏ Common leaks are handled
  ๏ Still possible to leak objects
flickr.com/ianlloyd




                     The HTML
                       This is where it all begins
flickr.com/ianlloyd




                                                                                      The HTML
                                                                                               This is where it all begins




                                                                                     index.html
<head>
    <title>NewApplication</title>
    <script type = "text/javascript">
         OBJJ_MAIN_FILE = "main.j";
    </script>
    <script src = "Frameworks/Objective-J/Objective-J.js" type = "text/javascript"></script>
</head>
flickr.com/splatt




                       main.j
 This is where it all begins + 1
flickr.com/splatt
                                     @import <Foundation/Foundation.j>
                                     @import <AppKit/AppKit.j>
                                     @import "AppController.j"


                                     function main(args, namedArgs)
                                     {
                                         CPApplicationMain(args, namedArgs);
                                     }
                                   main.j




                       main.j
 This is where it all begins + 1
Our AppController
     This is where it all begins + 2


                     flickr.com/paulhami
@import <Foundation/CPObject.j>
@implementation AppController : CPObject
{
}
- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{
    // The first method to be called in your app
}
@end
                                                     AppController.j



                                                                       Our AppController
                                                                            This is where it all begins + 2


                                                                                            flickr.com/paulhami
flickr.com/ecstaticist




    Ruby on Rails
     YES, they match!
flickr.com/ecstaticist
                        ๏ Communicate through AJAX calls
                        ๏ Data exchange with JSON




    Ruby on Rails
     YES, they match!
flickr.com/ecstaticist
                        ๏ Communicate through AJAX calls
                        ๏ Data exchange with JSON




                        Your controller
                           def index
                            @articles = Article.all
                            respond_to do |format|
    Ruby on Rails            format.json { :render :json =>
     YES, they match!        @articles }
                            end
                           end
flickr.com/pelesfury




The end
 I’m in love
flickr.com/pelesfury
๏ Cocoa like development
๏ Layer on top of your website
๏ Mac OS X like web applications




                                   The end
                                    I’m in love
flickr.com/jcarlosn




     References
So you can see I’m not making this up!
flickr.com/jcarlosn




          References
     So you can see I’m not making this up!




๏ cappuccino.org
๏ 280atlas.com
๏ 280slides.com
๏ cappuccinocasts.com
๏ documentation

Más contenido relacionado

La actualidad más candente

An Introduction to JavaScript
An Introduction to JavaScriptAn Introduction to JavaScript
An Introduction to JavaScript
tonyh1
 
Intro to node.js - Ran Mizrahi (28/8/14)
Intro to node.js - Ran Mizrahi (28/8/14)Intro to node.js - Ran Mizrahi (28/8/14)
Intro to node.js - Ran Mizrahi (28/8/14)
Ran Mizrahi
 
JavaScript Fundamentals & JQuery
JavaScript Fundamentals & JQueryJavaScript Fundamentals & JQuery
JavaScript Fundamentals & JQuery
Jamshid Hashimi
 

La actualidad más candente (18)

Javascript
JavascriptJavascript
Javascript
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScript
 
Diving in OOP (Day 3): Polymorphism and Inheritance (Dynamic Binding/Run Time...
Diving in OOP (Day 3): Polymorphism and Inheritance (Dynamic Binding/Run Time...Diving in OOP (Day 3): Polymorphism and Inheritance (Dynamic Binding/Run Time...
Diving in OOP (Day 3): Polymorphism and Inheritance (Dynamic Binding/Run Time...
 
An Introduction to JavaScript
An Introduction to JavaScriptAn Introduction to JavaScript
An Introduction to JavaScript
 
Java script tutorial
Java script tutorialJava script tutorial
Java script tutorial
 
JavaScript Modules Done Right
JavaScript Modules Done RightJavaScript Modules Done Right
JavaScript Modules Done Right
 
Java script Techniques Part I
Java script Techniques Part IJava script Techniques Part I
Java script Techniques Part I
 
Advanced javascript
Advanced javascriptAdvanced javascript
Advanced javascript
 
JavaScript Basics and Best Practices - CC FE & UX
JavaScript Basics and Best Practices - CC FE & UXJavaScript Basics and Best Practices - CC FE & UX
JavaScript Basics and Best Practices - CC FE & UX
 
WEB TECHNOLOGIES JavaScript
WEB TECHNOLOGIES JavaScriptWEB TECHNOLOGIES JavaScript
WEB TECHNOLOGIES JavaScript
 
Object Oriented Javascript
Object Oriented JavascriptObject Oriented Javascript
Object Oriented Javascript
 
How AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design PatternsHow AngularJS Embraced Traditional Design Patterns
How AngularJS Embraced Traditional Design Patterns
 
Metaprogramming in JavaScript
Metaprogramming in JavaScriptMetaprogramming in JavaScript
Metaprogramming in JavaScript
 
Intro to node.js - Ran Mizrahi (28/8/14)
Intro to node.js - Ran Mizrahi (28/8/14)Intro to node.js - Ran Mizrahi (28/8/14)
Intro to node.js - Ran Mizrahi (28/8/14)
 
JavaScript Core
JavaScript CoreJavaScript Core
JavaScript Core
 
JavaScript Fundamentals & JQuery
JavaScript Fundamentals & JQueryJavaScript Fundamentals & JQuery
JavaScript Fundamentals & JQuery
 
JavaScript OOPs
JavaScript OOPsJavaScript OOPs
JavaScript OOPs
 
Java Script Best Practices
Java Script Best PracticesJava Script Best Practices
Java Script Best Practices
 

Similar a Cappuccino

Objective C 基本介紹
Objective C 基本介紹Objective C 基本介紹
Objective C 基本介紹
Giga Cheng
 

Similar a Cappuccino (20)

Cappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application FrameworkCappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application Framework
 
Parte II Objective C
Parte II   Objective CParte II   Objective C
Parte II Objective C
 
Petri Niemi Qt Web Kit
Petri Niemi Qt Web KitPetri Niemi Qt Web Kit
Petri Niemi Qt Web Kit
 
Meet Elcodi, the flexible e-commerce components built on Symfony2
Meet Elcodi, the flexible e-commerce components built on Symfony2Meet Elcodi, the flexible e-commerce components built on Symfony2
Meet Elcodi, the flexible e-commerce components built on Symfony2
 
Developing JavaScript Widgets
Developing JavaScript WidgetsDeveloping JavaScript Widgets
Developing JavaScript Widgets
 
Objective-C Runtime overview
Objective-C Runtime overviewObjective-C Runtime overview
Objective-C Runtime overview
 
Brew up a Rich Web Application with Cappuccino
Brew up a Rich Web Application with CappuccinoBrew up a Rich Web Application with Cappuccino
Brew up a Rich Web Application with Cappuccino
 
iOS API Design
iOS API DesigniOS API Design
iOS API Design
 
Migrating Babel from CommonJS to ESM
Migrating Babel     from CommonJS to ESMMigrating Babel     from CommonJS to ESM
Migrating Babel from CommonJS to ESM
 
Object Oriented JavaScript
Object Oriented JavaScriptObject Oriented JavaScript
Object Oriented JavaScript
 
Javascript
JavascriptJavascript
Javascript
 
Best Practices in Qt Quick/QML - Part III
Best Practices in Qt Quick/QML - Part IIIBest Practices in Qt Quick/QML - Part III
Best Practices in Qt Quick/QML - Part III
 
Cocoa for Web Developers
Cocoa for Web DevelopersCocoa for Web Developers
Cocoa for Web Developers
 
Working with Cocoa and Objective-C
Working with Cocoa and Objective-CWorking with Cocoa and Objective-C
Working with Cocoa and Objective-C
 
Protocol-Oriented Programming in Swift
Protocol-Oriented Programming in SwiftProtocol-Oriented Programming in Swift
Protocol-Oriented Programming in Swift
 
Introduction to Javascript
Introduction to JavascriptIntroduction to Javascript
Introduction to Javascript
 
jQuery Objects
jQuery ObjectsjQuery Objects
jQuery Objects
 
Objective C 基本介紹
Objective C 基本介紹Objective C 基本介紹
Objective C 基本介紹
 
Swift - One step forward from Obj-C
Swift -  One step forward from Obj-CSwift -  One step forward from Obj-C
Swift - One step forward from Obj-C
 
Best Practices in Qt Quick/QML - Part I
Best Practices in Qt Quick/QML - Part IBest Practices in Qt Quick/QML - Part I
Best Practices in Qt Quick/QML - Part I
 

Ú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
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
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
 
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
 
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
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
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
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 

Cappuccino

  • 1. Cappuccino An “awesome” web framework flickr.com/kubina
  • 2. What is Cappuccino? Apart from a delicious beverage flickr.com/longo
  • 3. What is Cappuccino? Apart from a delicious beverage ๏ Objective-C style coding ๏ create desktop-like web apps ๏ No CSS, HTML or DOM ๏ No compilation ๏ No plugins required ๏ Runs client side ๏ AJAX calls to remote server flickr.com/longo
  • 4. Quick and dirty Let’s get cappuccino flickr.com/stinkiepinkie_infinity
  • 5. Quick and dirty Let’s get cappuccino ๏ Go to cappuccino.org/starter ๏ Unzip the package ๏ Go to the NewApplication folder ๏ Open index.html to start ๏ Start developing! flickr.com/stinkiepinkie_infinity
  • 6. flickr.com/digitalcolony The folder structure Help, I can’t find my files...
  • 7. flickr.com/digitalcolony ‣ AppFolder/ ‣ Frameworks/ ‣ Resources/ - index.html - index-debug.html - Info.plist - main.j - AppController.j The folder structure Help, I can’t find my files...
  • 8. Objective-J How to write some Cocoa like code flickr.com/sondyaustin
  • 9. user.setName(“Jake”); ‣ [user setName:”Jake”]; user.setNameAndAge(“Jake”, 12]; ‣ [user setName:”Jake” andAge:12]; User.getList(); ‣ [User list]; Objective-J How to write some Cocoa like code flickr.com/sondyaustin
  • 10. flickr.com/cgc Now let’s write a class It’s like Cocoa, but different!
  • 11. flickr.com/cgc Now let’s write a class A Objective-J class It’s like Cocoa, but different! @import <Foundation/CPObject.j> @import “... .j” @implement MyClass : CPObject { CPString objectString; } - (void)methodNameWithParam:(CPString)text { ... } + (void)staticMethod { ... } @end
  • 12. flickr.com/cgc Now let’s write a class A Objective-J class It’s like Cocoa, but different! @import <Foundation/CPObject.j> @import “... .j” @implement MyClass : CPObject { CPString objectString; } - (void)methodNameWithParam:(CPString)text { ... } Use an object and it’s methods + (void)staticMethod var object = [[MyClass alloc] init]; { ... } [object methodNameWithParam:”good!”]; @end
  • 13. flickr.com/cgc Now let’s write a class A Objective-J class It’s like Cocoa, but different! @import <Foundation/CPObject.j> @import “... .j” Accessors CPString objectString @accessors; @implement MyClass : CPObject { - (void)setObjectString:(CPString)value {...} CPString objectString; - (CPString)objectString { return objectString; } } - (void)methodNameWithParam:(CPString)text { ... } Use an object and it’s methods + (void)staticMethod var object = [[MyClass alloc] init]; { ... } [object methodNameWithParam:”good!”]; @end
  • 14. flickr.com/cgc Now let’s write a class It’s like Cocoa, but different!
  • 15. flickr.com/cgc Now let’s write a class Variables ... It’s like Cocoa, but different! globalVariable = “global variable” var fileVariable = “file scoped variable” @implement MyClass : CPObject { CPString objectVariable; } - (void)method { objectVariable = “object variable”; var functionVariable = “function variable”; aNewGlobalVariable = “another global variable”; } @end
  • 16. flickr.com/cgc Now let’s write a class Variables ... It’s like Cocoa, but different! globalVariable = “global variable” var fileVariable = “file scoped variable” @implement MyClass : CPObject { CPString objectVariable; } - (void)method Categories @implementation CPString (MyImplementation) { - (CPString)upper objectVariable = “object variable”; { var functionVariable = “function variable”; return [self uppercaseString]; aNewGlobalVariable = “another global variable”; } } @end @end
  • 17. flickr.com/jdebner Go and delegate! You’re like the boss that delegates everything
  • 18. flickr.com/jdebner Go and delegate! You’re like the boss that delegates everything ๏ Customize behavior without subclassing ๏ Move event handling to other class ๏ @selector to pass a method as a parameter
  • 19. flickr.com/jdebner Go and delegate! You’re like the boss that delegates everything
  • 20. flickr.com/jdebner Go and delegate! You’re like the boss that delegates everything Calling class that sets the delegate var request = [CPURLRequest requestWithURL:"http://www.fousa.be/articles.json"]; [request setHTTPMethod:"GET"]; connection = [CPURLConnection connectionWithRequest:request delegate:self];
  • 21. flickr.com/jdebner Go and delegate! You’re like the boss that delegates everything Calling class that sets the delegate var request = [CPURLRequest requestWithURL:"http://www.fousa.be/articles.json"]; [request setHTTPMethod:"GET"]; connection = [CPURLConnection connectionWithRequest:request delegate:self]; The delegate class - (void)connection:(CPURLConnection)myConnection didReceiveData:(CPString)data - (void)connection:(CPURLConnection)connection didFailWithError:(CPString)error - (void)connectionDidFinishLoading:(CPURLConnection)connection
  • 22. flickr.com/pandiyan Where is my memory? This is some weird shit...
  • 23. flickr.com/pandiyan Where is my memory? This is some weird shit... ๏ Garbage collection ๏ No retain / release ๏ Common leaks are handled ๏ Still possible to leak objects
  • 24. flickr.com/ianlloyd The HTML This is where it all begins
  • 25. flickr.com/ianlloyd The HTML This is where it all begins index.html <head> <title>NewApplication</title> <script type = "text/javascript"> OBJJ_MAIN_FILE = "main.j"; </script> <script src = "Frameworks/Objective-J/Objective-J.js" type = "text/javascript"></script> </head>
  • 26. flickr.com/splatt main.j This is where it all begins + 1
  • 27. flickr.com/splatt @import <Foundation/Foundation.j> @import <AppKit/AppKit.j> @import "AppController.j" function main(args, namedArgs) { CPApplicationMain(args, namedArgs); } main.j main.j This is where it all begins + 1
  • 28. Our AppController This is where it all begins + 2 flickr.com/paulhami
  • 29. @import <Foundation/CPObject.j> @implementation AppController : CPObject { } - (void)applicationDidFinishLaunching:(CPNotification)aNotification { // The first method to be called in your app } @end AppController.j Our AppController This is where it all begins + 2 flickr.com/paulhami
  • 30. flickr.com/ecstaticist Ruby on Rails YES, they match!
  • 31. flickr.com/ecstaticist ๏ Communicate through AJAX calls ๏ Data exchange with JSON Ruby on Rails YES, they match!
  • 32. flickr.com/ecstaticist ๏ Communicate through AJAX calls ๏ Data exchange with JSON Your controller def index @articles = Article.all respond_to do |format| Ruby on Rails format.json { :render :json => YES, they match! @articles } end end
  • 34. flickr.com/pelesfury ๏ Cocoa like development ๏ Layer on top of your website ๏ Mac OS X like web applications The end I’m in love
  • 35. flickr.com/jcarlosn References So you can see I’m not making this up!
  • 36. flickr.com/jcarlosn References So you can see I’m not making this up! ๏ cappuccino.org ๏ 280atlas.com ๏ 280slides.com ๏ cappuccinocasts.com ๏ documentation