SlideShare a Scribd company logo
1 of 63
Download to read offline
Web Development with


     Christopher M. Judd
Christopher M. Judd
President/Consultant of

                                    leader
Creator of open source projects FallME and Fiddle
December 2008 issue
Columbus iPhone
  User Group

http://groups.google.com/group/cidug
    Going the conversation
iPhone
2008 Third Quarter Smart Phone Sales
iPhone Uniqueness
Screen
  320




           480




                    Landscape


Portrait
Input




Multi-touch
                      Virtual Keyboard
Always Connected


                 EDGE
                  3G




Unlimited data
Location Aware
Accelerometer
Camera
Browser

   HTML 4.01
  XHTML 1.0
   JavaScript 3
 CSS 2.1 (partial 3.0)
  DOM Level 2
AJAX (XMLHTTPrequest)



                   Mobile Safari (WebKit)
Browser

   HTML 4.01
  XHTML 1.0
   JavaScript 3
 CSS 2.1 (partial 3.0)
  DOM Level 2                               XHTML Mobile Profile (MP)
AJAX (XMLHTTPrequest)                             WAP 2.0
                                                 WAP/WML




                   Mobile Safari (WebKit)
Browser

   HTML 4.01
  XHTML 1.0
   JavaScript 3
 CSS 2.1 (partial 3.0)
  DOM Level 2                               XHTML Mobile Profile (MP)
AJAX (XMLHTTPrequest)                             WAP 2.0
                                                 WAP/WML




                   Mobile Safari (WebKit)
iPhone Development

        vs
Disadvantages:
Advantages:
                             Must know Objective-C
 Access native features
                             Need Mac and OSX Leopard
  camera
  location awareness         Give up first born child in
  3D support                 mountain of legal agreements
  accelerometer (fine grain)
                             Must have application
  off-line access
                             approved and vetted before
 Performance
                             distribution in App Store
                             Process is on Apple’s timeline
                             not yours
Advantages:                  Disadvantages:
 Develop with Server-side     Don’t have access to
    technology of choice      native features
  Java                        Not as glamorous
  Groovy/Grails
                              Network performance
  Ruby
  .NET
  PHP
  Perl
 Don’t have to deal with
 syncing data with cloud
 Deployment and schedule
 is under your control
 Easier to deal with versioning
Support Levels

Incompatible                Optimized
               Compatible
Incompatible Websites
No plug-in support
                                                       Avoid
                    No mobile
                                                     HTML Frames
                technology support                Absolute positioning
                                                Mouse and keyboard events

                     XHTML Mobile Profile (MP)
                           WAP 2.0
                          WAP/WML




      There is not much Mobile Safari
              doesn’t support
Compatible Websites




Looks good and proportioned Home screen icon (Web Clip Icon)
Optimized Websites
Grails
• Web Application Framework
• Development Environment
• Open Source under Apache 2.0 License
• Current version 1.0.4 (1.1 is around the corner)
• Best Practices
      Convention over configuration
  –
      Don’t repeat yourself (DRY)
  –
      Default is what you expect (DIWYE)
  –
      Agile
  –
      Scaffolding
  –
      AJAX
  –
      Plug-ins
  –
      Unit testing
  –
      Web Services
  –
Grails MVC

    Controller




                 Domain
                          DB
      GSP
Grails Development Environment
      JDK
  •                               JDK 1.4


      Web Container/App Server
  •
      Build System
  •
      Application Stack
  •
      Persistence Framework
  •                              GORM

      Web Framework
  •
      Unit Test Framework
  •
      AJAX Framework
  •
      Database
  •
      Scheduling Framework
  •
      XML Framework
  •
      Logging Framework
  •
      View
  •
      IDE
  •
Installing Grails

1. Download from http://www.grails.org/Download
  • 1.0.4 - Stable Release
  • 1.1-BETA2 - Development Release
2. Unzip archive
3. Set GRAILS_HOME environment variable
4. Add %GRAILS_HOME%bin to system path




                 Depends on JDK 1.4 or greater
Creating a Grails App


grails create-app mynotes
Running a Grails App
                 Navigate to http://localhost:8080/mynotes



grails run-app
Add Domain Classes
                                        Note.groovy

                                    class Note {
grails create-domain-class note
                                    }

                                    NoteTests.groovy
                          class NoteTests extends GroovyTestCase
                          {

                              void testSomething() {

                              }
                          }
Implement Domains
    Add properties, methods, constraints, relationships

class Note {
  String title
  String content
  Date dateCreated
  Date lastUpdated

    static constraints = {
      title(blank:false, nullable:false, size:5..150)
      content(nullable:false, maxSize:1000)
    }

    String toString() { title }

}
Generate Scaffolding


grails generate-all note
Generate Scaffolding


grails generate-all note


  • Controller
  • Views
    • create
    • edit
    • list
    • show
Grails Request Flow
http://localhost:8080/mynotes/note/list
          class NoteController {

                     def index = { redirect(action:list,params:params) }

                     def list = {
                           if(!params.max) params.max = 10
                           [ noteList: Note.list( params ) ]
                     }

                      // ... code removed for brevity
          }

                                                  grails-app/views/layout/main.gsp
grails-app/views/note/list.gsp
                                                        <html>
      <html>                                                <head>
        <head>                                                  <title><g:layoutTitle default=quot;Grailsquot; /></title>
          <meta name=quot;layoutquot; content=quot;mainquot; />                 <link rel=quot;stylesheetquot; href=quot;${createLinkTo(dir:'css',f
          <title>Note List</title>                              <link rel=quot;shortcut iconquot; href=quot;${createLinkTo(dir:'ima
        </head>                                                 <g:layoutHead />
        <body>                                                  <g:javascript library=quot;applicationquot; />
          <div class=quot;bodyquot;>                                </head>
             <h1>Note List</h1>                             <body>
             <div class=quot;listquot;>                                 <div id=quot;spinnerquot; class=quot;spinnerquot; style=quot;display:none;quot;
               <!-- code remove for brevity -->                     <img src=quot;${createLinkTo(dir:'images',file:'spinner
             </div>                                             </div>
          </div>                                                <div class=quot;logoquot;><img src=quot;${createLinkTo(dir:'images'
        </body>                                                 <g:layoutBody />
      </html>                                               </body>
                                                        </html>
Minimal iPhone Support
Home Screen Icon
      (Web Clip Icon)
Home Screen Icon
      (Web Clip Icon)
Home Screen Icon
        (Web Clip Icon)



    <link rel=quot;apple-touch-iconquot;
        href=quot;images/apple-touch-icon.pngquot;/>
Home Screen Icon
        (Web Clip Icon)



    <link rel=quot;apple-touch-iconquot;
        href=quot;images/apple-touch-icon.pngquot;/>




              iPhone Adds
              • Rounded corners
              • Drop shadow
              • Reflective shine
Home Screen Icon
        (Web Clip Icon)



    <link rel=quot;apple-touch-iconquot;
        href=quot;images/apple-touch-icon.pngquot;/>




              iPhone Adds
              • Rounded corners
              • Drop shadow
              • Reflective shine
Home Screen Icon
        (Web Clip Icon)



    <link rel=quot;apple-touch-iconquot;
        href=quot;images/apple-touch-icon.pngquot;/>


            png image 57x57
              iPhone Adds
              • Rounded corners
              • Drop shadow
              • Reflective shine
Scaling




        Default width is 980                              Custom Viewport
   and scaled down by 2:1 or 3:1
<meta name=quot;viewportquot;
    content=quot;width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;quot;>
Custom iPhone
 Applications
   with iUI
iUI
 Provide a native iPhone application look and feel
  Open Source library containing
   Cascading Style Sheets (CSS)
   JavaScript
   Images


http://code.google.com/p/iui/




                       Transitions    Lists   Forms
iUI is AJAX
ommonly implemented as a single page
Named anchors URLs transition to named elements
Standard URLs make AJAX requests to server for snippet
Full page requests must use target of _self
Get more URLs must use target of _replace
Setting up iUI
     1.Download tar
     2.Uncompress
     3.Copy images, iui.css, iui.js and iuix.js to web project
     4.Import iui.css and iui.js
<html>
  <head>
    <title>Note List</title>
    <style type=quot;text/cssquot; media=quot;screenquot;>@import quot;/mynotes/js/iui/iui.cssquot;;</style>
    <meta name=quot;viewportquot;
       content=quot;width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;quot;>
    <link rel=quot;apple-touch-iconquot; href=quot;/mynotes/images/apple-touch-icon.pngquot;/>
    <script type=quot;text/javascriptquot; src=quot;/mynotes/js/iui/iui.jsquot;></script>
    <script type=quot;text/javascriptquot; src=quot;/mynotes/js/application.jsquot;></script>
  </head>
  <body>
     <!-- code removed for brevity -->
  </body>
</html>
Toolbar
<html>
  <head>
   <!-- code removed for brevity -->
  </head>
  <body>
    <div class=quot;toolbarquot;>
       <h1 id=quot;pageTitlequot;></h1>
       <a id=quot;backButtonquot; class=quot;buttonquot; href=quot;#quot;></a>
       <a href=quot;/mynotes/note/createquot; class=quot;buttonquot;>+</a>
    </div>
    </body>
</html>




        Manages state and history
List
 <html>
   <head>
      <!-- code removed for brevity -->
   </head>
   <body>
     <div class=quot;toolbarquot;>
        <h1 id=quot;pageTitlequot;></h1>
        <a id=quot;backButtonquot; class=quot;buttonquot; href=quot;#quot;></a>
        <a href=quot;/mynotes/note/createquot; class=quot;buttonquot;>+</a>
     </div>

     <ul id=quot;notesquot; title=quot;Notesquot; selected=quot;truequot;>
       <li><a href=quot;/mynotes/note/show/46quot;>Grocery list</a></li>
       <li><a href=quot;/mynotes/note/show/47quot;>Chrismas wish list</a></li
       <li>
         <a href=quot;/mynotes/note/more?offset=8quot; target=quot;_replacequot;>
           Show 8 More Notes...
         </a>
       </li>
     </ul>
     </body>
 </html>



Just an HTML unordered list
Forms
<html>
  <body>

  <div style=quot;left: 0%;quot; id=quot;Notesquot; title=quot;Notesquot; class=quot;panelquot;>
    <h2>Show Note</h2>
    <fieldset>
      <div class=quot;rowquot;>
        <label>Title</label>
        <input type=quot;textquot; name=quot;titlequot; value=quot;Grocery listquot;/>
      </div>
      <div class=quot;rowquot;>
        <label>Content</label>
        <textarea rows=quot;5quot; cols=quot;30quot; name=quot;contentquot;>
          Eggs
          Milk
          Coffee
        </textarea>
      </div>
    </fieldset>

    <form id=quot;deleteFormquot; name=quot;deleteFormquot;
              action=quot;deletequot; method=quot;postquot;>
      <input type=quot;hiddenquot; name=quot;idquot; value=quot;46quot; />
      <a class=quot;whiteButtonquot; href=quot;#quot;
        target=quot;_selfquot;
        onclick=quot;document.deleteForm.submit()quot;>Delete</a>
    </form>

  </div>
  </body>
</html>
Grails and iUI
Grails iUI Plug-in
      A plug-in for simplifying using iUI with Grails.
                   http://grails.org/iUI+Plugin


                              iPhone layout
                              iUI CSS, JavaScript and images
grails install-plugin iui     Grails apple-touch-icon
                              Automatically uses optimized
                              JavaScript in production mode
Determine iPhone
User-Agents
 iPhone - Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML,
    like Gecko) Version/3.0 Mobile/4A93 Safari/419.3


    iPod Touch - Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1
    (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3


            Use Regular Express - Mobile.*Safari
class IPhoneFilters {
  def filters = {
    all(controller:'*', action:'*') {
      before = {
        if (request.getHeader(quot;User-Agentquot;) =~ quot;Mobile.*Safariquot;)
          request['fromIPhone'] = true
      }

        }
    }
}
Render iPhone View

def list = {
    if(!params.max) params.max = 8

    if (request.fromIPhone)
      render(view:'iphone_list', model:[noteList: Note.list( params )])
    else
      render(view:'list', model: [ noteList: Note.list( params ) ])
}
Snippets
                                Use templates

 <ul id=quot;notesquot; title=quot;Notesquot; selected=quot;truequot;>
   <g:render template=quot;iphone_notesquot; />
 </ul>




_iphone_notes.gsp
<g:each in=quot;${noteList}quot; status=quot;iquot; var=quot;notequot;>
  <li><g:link action=quot;showquot; id=quot;${note?.id}quot;>
       ${fieldValue(bean:note, field:'title')}
  </g:link></li>
</g:each>
<li>
  <g:link action=quot;morequot; target=quot;_replacequot; params=quot;[offset: 8]quot;>
       Show 8 More Notes...
  </g:link>
</li>
Testing
iPhone/iPod Touch

                      Challenges
                      • Corporate Network Access
                      • Hands of keyboard
                      • Difficult to debug




Should definitely use for final testing
SDK iPhone Simulator

              Challenges
              • Only works on Leopard OSX
              • Difficult to debug




  Included with SDK/XCode
Safari

      Challenges
      • Renders things the iPhone won’t




Mac or Windows
iPhone Spoofing
Debugging
iPhone Bookmarklets
http://www.manifestinteractive.com/iphone/#_Webdev


            Unique JavaScript solution
             View source
             Dump scripts
             View cookies
             etc
Resources


Web Development Guidelines for the iPhone (Safari Web Content Guide for iPhone OS)
   - https://developer.apple.com/webapps/docs/documentation/AppleApplications/Reference/SafariWebContent/
Safari HTML Reference
   - http://developer.apple.com/documentation/AppleApplications/Reference/SafariHTMLRef/
Safari CSS Reference
   - http://developer.apple.com/documentation/AppleApplications/Reference/SafariCSSRef/
WebKit DOM Programming Topic
   - http://developer.apple.com/documentation/AppleApplications/Conceptual/SafariJSProgTopics/

More Related Content

What's hot

Build responsive applications with google flutter
Build responsive applications with  google flutterBuild responsive applications with  google flutter
Build responsive applications with google flutterAhmed Abu Eldahab
 
Build beautiful native apps in record time with flutter
Build beautiful native apps in record time with flutterBuild beautiful native apps in record time with flutter
Build beautiful native apps in record time with flutterRobertLe30
 
Google flutter the easy and practical way
Google flutter the easy and practical wayGoogle flutter the easy and practical way
Google flutter the easy and practical wayAhmed Abu Eldahab
 
Flutter beyond hello world GCDC Egypt Devfest 2019
Flutter beyond hello world GCDC Egypt  Devfest 2019Flutter beyond hello world GCDC Egypt  Devfest 2019
Flutter beyond hello world GCDC Egypt Devfest 2019Ahmed Abu Eldahab
 
What is flutter and why should i care?
What is flutter and why should i care?What is flutter and why should i care?
What is flutter and why should i care?Sergi Martínez
 
Build web applications using google flutter
Build web applications using google flutterBuild web applications using google flutter
Build web applications using google flutterAhmed Abu Eldahab
 
Google flutter the easy and practical way
Google flutter the easy and practical wayGoogle flutter the easy and practical way
Google flutter the easy and practical wayAhmed Abu Eldahab
 
Flutter latest updates and features 2022
Flutter latest updates and features 2022Flutter latest updates and features 2022
Flutter latest updates and features 2022Ahmed Abu Eldahab
 
Developing cross platform apps in Flutter (Android, iOS, and Web)
Developing cross platform apps in Flutter (Android, iOS, and Web)Developing cross platform apps in Flutter (Android, iOS, and Web)
Developing cross platform apps in Flutter (Android, iOS, and Web)Priyanka Tyagi
 
Mobile Devolpment Slides
Mobile Devolpment SlidesMobile Devolpment Slides
Mobile Devolpment SlidesLuke Angel
 
Flutter Tutorial For Beginners | Edureka
Flutter Tutorial For Beginners | EdurekaFlutter Tutorial For Beginners | Edureka
Flutter Tutorial For Beginners | EdurekaEdureka!
 
Getting started with flutter
Getting started with flutterGetting started with flutter
Getting started with flutterrihannakedy
 
Rapid Prototyping with Cordova aka Phonegap
Rapid Prototyping with Cordova aka PhonegapRapid Prototyping with Cordova aka Phonegap
Rapid Prototyping with Cordova aka PhonegapJosue Bustos
 
Silverlight 2 with Visual Studio 2008 and Expression Blend
Silverlight 2 with Visual Studio 2008 and Expression BlendSilverlight 2 with Visual Studio 2008 and Expression Blend
Silverlight 2 with Visual Studio 2008 and Expression BlendCaleb Jenkins
 
Flutter state management from zero to hero
Flutter state management from zero to heroFlutter state management from zero to hero
Flutter state management from zero to heroAhmed Abu Eldahab
 
Flutter for web
Flutter for web Flutter for web
Flutter for web rihannakedy
 
Building beautiful apps using google flutter
Building beautiful apps using google flutterBuilding beautiful apps using google flutter
Building beautiful apps using google flutterAhmed Abu Eldahab
 

What's hot (20)

Build responsive applications with google flutter
Build responsive applications with  google flutterBuild responsive applications with  google flutter
Build responsive applications with google flutter
 
Build beautiful native apps in record time with flutter
Build beautiful native apps in record time with flutterBuild beautiful native apps in record time with flutter
Build beautiful native apps in record time with flutter
 
Flutter beyond hello world
Flutter beyond hello worldFlutter beyond hello world
Flutter beyond hello world
 
Flutter - DevFestDC
Flutter - DevFestDCFlutter - DevFestDC
Flutter - DevFestDC
 
Google flutter the easy and practical way
Google flutter the easy and practical wayGoogle flutter the easy and practical way
Google flutter the easy and practical way
 
Flutter beyond hello world GCDC Egypt Devfest 2019
Flutter beyond hello world GCDC Egypt  Devfest 2019Flutter beyond hello world GCDC Egypt  Devfest 2019
Flutter beyond hello world GCDC Egypt Devfest 2019
 
What is flutter and why should i care?
What is flutter and why should i care?What is flutter and why should i care?
What is flutter and why should i care?
 
Build web applications using google flutter
Build web applications using google flutterBuild web applications using google flutter
Build web applications using google flutter
 
Google flutter the easy and practical way
Google flutter the easy and practical wayGoogle flutter the easy and practical way
Google flutter the easy and practical way
 
Flutter latest updates and features 2022
Flutter latest updates and features 2022Flutter latest updates and features 2022
Flutter latest updates and features 2022
 
Developing cross platform apps in Flutter (Android, iOS, and Web)
Developing cross platform apps in Flutter (Android, iOS, and Web)Developing cross platform apps in Flutter (Android, iOS, and Web)
Developing cross platform apps in Flutter (Android, iOS, and Web)
 
Mobile Devolpment Slides
Mobile Devolpment SlidesMobile Devolpment Slides
Mobile Devolpment Slides
 
Flutter Tutorial For Beginners | Edureka
Flutter Tutorial For Beginners | EdurekaFlutter Tutorial For Beginners | Edureka
Flutter Tutorial For Beginners | Edureka
 
Getting started with flutter
Getting started with flutterGetting started with flutter
Getting started with flutter
 
Rapid Prototyping with Cordova aka Phonegap
Rapid Prototyping with Cordova aka PhonegapRapid Prototyping with Cordova aka Phonegap
Rapid Prototyping with Cordova aka Phonegap
 
Silverlight 2 with Visual Studio 2008 and Expression Blend
Silverlight 2 with Visual Studio 2008 and Expression BlendSilverlight 2 with Visual Studio 2008 and Expression Blend
Silverlight 2 with Visual Studio 2008 and Expression Blend
 
Flutter state management from zero to hero
Flutter state management from zero to heroFlutter state management from zero to hero
Flutter state management from zero to hero
 
Flutter for web
Flutter for web Flutter for web
Flutter for web
 
Flutter101
Flutter101Flutter101
Flutter101
 
Building beautiful apps using google flutter
Building beautiful apps using google flutterBuilding beautiful apps using google flutter
Building beautiful apps using google flutter
 

Similar to IPhone Web Development With Grails from CodeMash 2009

IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008Association Paris-Web
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on MobileAdam Lu
 
Real-World AJAX with ASP.NET
Real-World AJAX with ASP.NETReal-World AJAX with ASP.NET
Real-World AJAX with ASP.NETgoodfriday
 
Silver Light By Nyros Developer
Silver Light By Nyros DeveloperSilver Light By Nyros Developer
Silver Light By Nyros DeveloperNyros Technologies
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13Fred Sauer
 
Widget Summit 2008
Widget Summit 2008Widget Summit 2008
Widget Summit 2008Volkan Unsal
 
Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007Guillaume Laforge
 
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersAccelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersTodd Anglin
 
Client-side JavaScript Vulnerabilities
Client-side JavaScript VulnerabilitiesClient-side JavaScript Vulnerabilities
Client-side JavaScript VulnerabilitiesOry Segal
 
GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009marpierc
 
Internet Explorer 8 for Developers by Christian Thilmany
Internet Explorer 8 for Developers by Christian ThilmanyInternet Explorer 8 for Developers by Christian Thilmany
Internet Explorer 8 for Developers by Christian ThilmanyChristian Thilmany
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User ExperienceMahbubur Rahman
 
Html 5 in a big nutshell
Html 5 in a big nutshellHtml 5 in a big nutshell
Html 5 in a big nutshellLennart Schoors
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and moreYan Shi
 
Web app and more
Web app and moreWeb app and more
Web app and morefaming su
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet Sagar Nakul
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet Sagar Nakul
 
Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09Steve Souders
 
Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0Estelle Weyl
 

Similar to IPhone Web Development With Grails from CodeMash 2009 (20)

IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
IE 8 et les standards du Web - Chris Wilson - Paris Web 2008
 
HTML5 on Mobile
HTML5 on MobileHTML5 on Mobile
HTML5 on Mobile
 
Real-World AJAX with ASP.NET
Real-World AJAX with ASP.NETReal-World AJAX with ASP.NET
Real-World AJAX with ASP.NET
 
Silver Light By Nyros Developer
Silver Light By Nyros DeveloperSilver Light By Nyros Developer
Silver Light By Nyros Developer
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
 
Widget Summit 2008
Widget Summit 2008Widget Summit 2008
Widget Summit 2008
 
Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007
 
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersAccelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
 
Client-side JavaScript Vulnerabilities
Client-side JavaScript VulnerabilitiesClient-side JavaScript Vulnerabilities
Client-side JavaScript Vulnerabilities
 
GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009
 
Internet Explorer 8 for Developers by Christian Thilmany
Internet Explorer 8 for Developers by Christian ThilmanyInternet Explorer 8 for Developers by Christian Thilmany
Internet Explorer 8 for Developers by Christian Thilmany
 
HTML5 for Rich User Experience
HTML5 for Rich User ExperienceHTML5 for Rich User Experience
HTML5 for Rich User Experience
 
Html 5 in a big nutshell
Html 5 in a big nutshellHtml 5 in a big nutshell
Html 5 in a big nutshell
 
Web Apps and more
Web Apps and moreWeb Apps and more
Web Apps and more
 
Web app and more
Web app and moreWeb app and more
Web app and more
 
Struts,Jsp,Servlet
Struts,Jsp,ServletStruts,Jsp,Servlet
Struts,Jsp,Servlet
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
 
Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09
 
Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0
 

Recently uploaded

Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Celine George
 
Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Celine George
 
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfAMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfphamnguyenenglishnb
 
Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Jisc
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)lakshayb543
 
Judging the Relevance and worth of ideas part 2.pptx
Judging the Relevance  and worth of ideas part 2.pptxJudging the Relevance  and worth of ideas part 2.pptx
Judging the Relevance and worth of ideas part 2.pptxSherlyMaeNeri
 
4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptxmary850239
 
ACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdfACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdfSpandanaRallapalli
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONHumphrey A Beña
 
Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxMaryGraceBautista27
 
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Celine George
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parentsnavabharathschool99
 
What is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERPWhat is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERPCeline George
 
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTiammrhaywood
 
ENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomnelietumpap1
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatYousafMalik24
 
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfLike-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfMr Bounab Samir
 
Full Stack Web Development Course for Beginners
Full Stack Web Development Course  for BeginnersFull Stack Web Development Course  for Beginners
Full Stack Web Development Course for BeginnersSabitha Banu
 

Recently uploaded (20)

Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17
 
Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17Computed Fields and api Depends in the Odoo 17
Computed Fields and api Depends in the Odoo 17
 
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfAMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
 
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdfTataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
 
Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
 
Judging the Relevance and worth of ideas part 2.pptx
Judging the Relevance  and worth of ideas part 2.pptxJudging the Relevance  and worth of ideas part 2.pptx
Judging the Relevance and worth of ideas part 2.pptx
 
4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx
 
ACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdfACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdf
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
 
Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptx
 
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
 
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
Incoming and Outgoing Shipments in 3 STEPS Using Odoo 17
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parents
 
What is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERPWhat is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERP
 
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPTECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
ECONOMIC CONTEXT - LONG FORM TV DRAMA - PPT
 
ENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choom
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice great
 
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfLike-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
 
Full Stack Web Development Course for Beginners
Full Stack Web Development Course  for BeginnersFull Stack Web Development Course  for Beginners
Full Stack Web Development Course for Beginners
 

IPhone Web Development With Grails from CodeMash 2009

  • 1. Web Development with Christopher M. Judd
  • 2. Christopher M. Judd President/Consultant of leader Creator of open source projects FallME and Fiddle
  • 4. Columbus iPhone User Group http://groups.google.com/group/cidug Going the conversation
  • 6. 2008 Third Quarter Smart Phone Sales
  • 8. Screen 320 480 Landscape Portrait
  • 9. Input Multi-touch Virtual Keyboard
  • 10. Always Connected EDGE 3G Unlimited data
  • 14. Browser HTML 4.01 XHTML 1.0 JavaScript 3 CSS 2.1 (partial 3.0) DOM Level 2 AJAX (XMLHTTPrequest) Mobile Safari (WebKit)
  • 15. Browser HTML 4.01 XHTML 1.0 JavaScript 3 CSS 2.1 (partial 3.0) DOM Level 2 XHTML Mobile Profile (MP) AJAX (XMLHTTPrequest) WAP 2.0 WAP/WML Mobile Safari (WebKit)
  • 16. Browser HTML 4.01 XHTML 1.0 JavaScript 3 CSS 2.1 (partial 3.0) DOM Level 2 XHTML Mobile Profile (MP) AJAX (XMLHTTPrequest) WAP 2.0 WAP/WML Mobile Safari (WebKit)
  • 18. Disadvantages: Advantages: Must know Objective-C Access native features Need Mac and OSX Leopard camera location awareness Give up first born child in 3D support mountain of legal agreements accelerometer (fine grain) Must have application off-line access approved and vetted before Performance distribution in App Store Process is on Apple’s timeline not yours
  • 19. Advantages: Disadvantages: Develop with Server-side Don’t have access to technology of choice native features Java Not as glamorous Groovy/Grails Network performance Ruby .NET PHP Perl Don’t have to deal with syncing data with cloud Deployment and schedule is under your control Easier to deal with versioning
  • 20. Support Levels Incompatible Optimized Compatible
  • 21. Incompatible Websites No plug-in support Avoid No mobile HTML Frames technology support Absolute positioning Mouse and keyboard events XHTML Mobile Profile (MP) WAP 2.0 WAP/WML There is not much Mobile Safari doesn’t support
  • 22. Compatible Websites Looks good and proportioned Home screen icon (Web Clip Icon)
  • 25. • Web Application Framework • Development Environment • Open Source under Apache 2.0 License • Current version 1.0.4 (1.1 is around the corner) • Best Practices Convention over configuration – Don’t repeat yourself (DRY) – Default is what you expect (DIWYE) – Agile – Scaffolding – AJAX – Plug-ins – Unit testing – Web Services –
  • 26. Grails MVC Controller Domain DB GSP
  • 27. Grails Development Environment JDK • JDK 1.4 Web Container/App Server • Build System • Application Stack • Persistence Framework • GORM Web Framework • Unit Test Framework • AJAX Framework • Database • Scheduling Framework • XML Framework • Logging Framework • View • IDE •
  • 28. Installing Grails 1. Download from http://www.grails.org/Download • 1.0.4 - Stable Release • 1.1-BETA2 - Development Release 2. Unzip archive 3. Set GRAILS_HOME environment variable 4. Add %GRAILS_HOME%bin to system path Depends on JDK 1.4 or greater
  • 29. Creating a Grails App grails create-app mynotes
  • 30. Running a Grails App Navigate to http://localhost:8080/mynotes grails run-app
  • 31. Add Domain Classes Note.groovy class Note { grails create-domain-class note } NoteTests.groovy class NoteTests extends GroovyTestCase { void testSomething() { } }
  • 32. Implement Domains Add properties, methods, constraints, relationships class Note { String title String content Date dateCreated Date lastUpdated static constraints = { title(blank:false, nullable:false, size:5..150) content(nullable:false, maxSize:1000) } String toString() { title } }
  • 34. Generate Scaffolding grails generate-all note • Controller • Views • create • edit • list • show
  • 35. Grails Request Flow http://localhost:8080/mynotes/note/list class NoteController { def index = { redirect(action:list,params:params) } def list = { if(!params.max) params.max = 10 [ noteList: Note.list( params ) ] } // ... code removed for brevity } grails-app/views/layout/main.gsp grails-app/views/note/list.gsp <html> <html> <head> <head> <title><g:layoutTitle default=quot;Grailsquot; /></title> <meta name=quot;layoutquot; content=quot;mainquot; /> <link rel=quot;stylesheetquot; href=quot;${createLinkTo(dir:'css',f <title>Note List</title> <link rel=quot;shortcut iconquot; href=quot;${createLinkTo(dir:'ima </head> <g:layoutHead /> <body> <g:javascript library=quot;applicationquot; /> <div class=quot;bodyquot;> </head> <h1>Note List</h1> <body> <div class=quot;listquot;> <div id=quot;spinnerquot; class=quot;spinnerquot; style=quot;display:none;quot; <!-- code remove for brevity --> <img src=quot;${createLinkTo(dir:'images',file:'spinner </div> </div> </div> <div class=quot;logoquot;><img src=quot;${createLinkTo(dir:'images' </body> <g:layoutBody /> </html> </body> </html>
  • 37. Home Screen Icon (Web Clip Icon)
  • 38. Home Screen Icon (Web Clip Icon)
  • 39. Home Screen Icon (Web Clip Icon) <link rel=quot;apple-touch-iconquot; href=quot;images/apple-touch-icon.pngquot;/>
  • 40. Home Screen Icon (Web Clip Icon) <link rel=quot;apple-touch-iconquot; href=quot;images/apple-touch-icon.pngquot;/> iPhone Adds • Rounded corners • Drop shadow • Reflective shine
  • 41. Home Screen Icon (Web Clip Icon) <link rel=quot;apple-touch-iconquot; href=quot;images/apple-touch-icon.pngquot;/> iPhone Adds • Rounded corners • Drop shadow • Reflective shine
  • 42. Home Screen Icon (Web Clip Icon) <link rel=quot;apple-touch-iconquot; href=quot;images/apple-touch-icon.pngquot;/> png image 57x57 iPhone Adds • Rounded corners • Drop shadow • Reflective shine
  • 43. Scaling Default width is 980 Custom Viewport and scaled down by 2:1 or 3:1 <meta name=quot;viewportquot; content=quot;width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;quot;>
  • 45. iUI Provide a native iPhone application look and feel Open Source library containing Cascading Style Sheets (CSS) JavaScript Images http://code.google.com/p/iui/ Transitions Lists Forms
  • 46. iUI is AJAX ommonly implemented as a single page Named anchors URLs transition to named elements Standard URLs make AJAX requests to server for snippet Full page requests must use target of _self Get more URLs must use target of _replace
  • 47. Setting up iUI 1.Download tar 2.Uncompress 3.Copy images, iui.css, iui.js and iuix.js to web project 4.Import iui.css and iui.js <html> <head> <title>Note List</title> <style type=quot;text/cssquot; media=quot;screenquot;>@import quot;/mynotes/js/iui/iui.cssquot;;</style> <meta name=quot;viewportquot; content=quot;width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;quot;> <link rel=quot;apple-touch-iconquot; href=quot;/mynotes/images/apple-touch-icon.pngquot;/> <script type=quot;text/javascriptquot; src=quot;/mynotes/js/iui/iui.jsquot;></script> <script type=quot;text/javascriptquot; src=quot;/mynotes/js/application.jsquot;></script> </head> <body> <!-- code removed for brevity --> </body> </html>
  • 48. Toolbar <html> <head> <!-- code removed for brevity --> </head> <body> <div class=quot;toolbarquot;> <h1 id=quot;pageTitlequot;></h1> <a id=quot;backButtonquot; class=quot;buttonquot; href=quot;#quot;></a> <a href=quot;/mynotes/note/createquot; class=quot;buttonquot;>+</a> </div> </body> </html> Manages state and history
  • 49. List <html> <head> <!-- code removed for brevity --> </head> <body> <div class=quot;toolbarquot;> <h1 id=quot;pageTitlequot;></h1> <a id=quot;backButtonquot; class=quot;buttonquot; href=quot;#quot;></a> <a href=quot;/mynotes/note/createquot; class=quot;buttonquot;>+</a> </div> <ul id=quot;notesquot; title=quot;Notesquot; selected=quot;truequot;> <li><a href=quot;/mynotes/note/show/46quot;>Grocery list</a></li> <li><a href=quot;/mynotes/note/show/47quot;>Chrismas wish list</a></li <li> <a href=quot;/mynotes/note/more?offset=8quot; target=quot;_replacequot;> Show 8 More Notes... </a> </li> </ul> </body> </html> Just an HTML unordered list
  • 50. Forms <html> <body> <div style=quot;left: 0%;quot; id=quot;Notesquot; title=quot;Notesquot; class=quot;panelquot;> <h2>Show Note</h2> <fieldset> <div class=quot;rowquot;> <label>Title</label> <input type=quot;textquot; name=quot;titlequot; value=quot;Grocery listquot;/> </div> <div class=quot;rowquot;> <label>Content</label> <textarea rows=quot;5quot; cols=quot;30quot; name=quot;contentquot;> Eggs Milk Coffee </textarea> </div> </fieldset> <form id=quot;deleteFormquot; name=quot;deleteFormquot; action=quot;deletequot; method=quot;postquot;> <input type=quot;hiddenquot; name=quot;idquot; value=quot;46quot; /> <a class=quot;whiteButtonquot; href=quot;#quot; target=quot;_selfquot; onclick=quot;document.deleteForm.submit()quot;>Delete</a> </form> </div> </body> </html>
  • 52. Grails iUI Plug-in A plug-in for simplifying using iUI with Grails. http://grails.org/iUI+Plugin iPhone layout iUI CSS, JavaScript and images grails install-plugin iui Grails apple-touch-icon Automatically uses optimized JavaScript in production mode
  • 53. Determine iPhone User-Agents iPhone - Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3 iPod Touch - Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3 Use Regular Express - Mobile.*Safari class IPhoneFilters { def filters = { all(controller:'*', action:'*') { before = { if (request.getHeader(quot;User-Agentquot;) =~ quot;Mobile.*Safariquot;) request['fromIPhone'] = true } } } }
  • 54. Render iPhone View def list = { if(!params.max) params.max = 8 if (request.fromIPhone) render(view:'iphone_list', model:[noteList: Note.list( params )]) else render(view:'list', model: [ noteList: Note.list( params ) ]) }
  • 55. Snippets Use templates <ul id=quot;notesquot; title=quot;Notesquot; selected=quot;truequot;> <g:render template=quot;iphone_notesquot; /> </ul> _iphone_notes.gsp <g:each in=quot;${noteList}quot; status=quot;iquot; var=quot;notequot;> <li><g:link action=quot;showquot; id=quot;${note?.id}quot;> ${fieldValue(bean:note, field:'title')} </g:link></li> </g:each> <li> <g:link action=quot;morequot; target=quot;_replacequot; params=quot;[offset: 8]quot;> Show 8 More Notes... </g:link> </li>
  • 57. iPhone/iPod Touch Challenges • Corporate Network Access • Hands of keyboard • Difficult to debug Should definitely use for final testing
  • 58. SDK iPhone Simulator Challenges • Only works on Leopard OSX • Difficult to debug Included with SDK/XCode
  • 59. Safari Challenges • Renders things the iPhone won’t Mac or Windows
  • 62. iPhone Bookmarklets http://www.manifestinteractive.com/iphone/#_Webdev Unique JavaScript solution View source Dump scripts View cookies etc
  • 63. Resources Web Development Guidelines for the iPhone (Safari Web Content Guide for iPhone OS) - https://developer.apple.com/webapps/docs/documentation/AppleApplications/Reference/SafariWebContent/ Safari HTML Reference - http://developer.apple.com/documentation/AppleApplications/Reference/SafariHTMLRef/ Safari CSS Reference - http://developer.apple.com/documentation/AppleApplications/Reference/SafariCSSRef/ WebKit DOM Programming Topic - http://developer.apple.com/documentation/AppleApplications/Conceptual/SafariJSProgTopics/