SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Ähnlich wie Cappuccino

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

Ähnlich wie 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
 

Kürzlich hochgeladen

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
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
 

Kürzlich hochgeladen (20)

Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
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
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
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, ...
 
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
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
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
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
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...
 
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
 

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