<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4796989825752694875</id><updated>2011-07-07T15:30:28.979-07:00</updated><category term='Videos'/><category term='Dashcode'/><category term='Key Combos'/><category term='iPhone SDK'/><category term='iAd Gallery - FAQ'/><category term='ManiacDev'/><category term='Dashboard Guidelines'/><category term='Developer News'/><category term='Developer Forum'/><category term='Links'/><category term='Development Tools'/><category term='iOS Developer News'/><category term='Wallpaper'/><category term='Web Apps'/><category term='iAd'/><category term='Developer Tips'/><category term='Tutorials'/><category term='Ajax'/><category term='Developer Widgets'/><category term='Dashboard'/><title type='text'>Dashcode Tips and Tricks</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-2651910281155916559</id><published>2011-04-09T19:02:00.000-07:00</published><updated>2011-04-09T19:04:48.481-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iAd Gallery - FAQ'/><category scheme='http://www.blogger.com/atom/ns#' term='iAd'/><title type='text'>iAd Gallery - FAQ</title><content type='html'>&lt;span style="font-size: large;"&gt;&lt;b&gt;Where can I find the iAd Gallery app ?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;You can download the iAd Gallery app for free from the App Store on your iPhone or iPod touch.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;What are the system requirements to use iAd Gallery ?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The iAd Gallery app requires iOS 4.2.6 or later, and can be viewed on an iPhone 4, iPhone 3GS, or iPod touch (4th generation).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Which ads are viewable in iAd Gallery ?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The iAd Gallery is updated regularly to include a selection of the latest ads appearing in your favorite apps on the iAd Network. Browse, search, read about, and interact with ads from leading brands from around the world. You can even select ads to add to your Loved section so you can easily go back to them any time.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-oKeZAO7DOms/TaEOZBdE9iI/AAAAAAAACz8/dfA-b3DSBQA/s1600/HT4538_1-iads-loved-002-en.png" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;When are ads added/removed ?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The iAd Gallery is updated regularly to include a selection of the latest ads appearing in your favorite apps on the iAd Network.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Why is an ad in my Loved section not working ?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;As we retire ads from the iAd Gallery app, they will appear as disabled in the Loved section. You may delete any ad from the Loved section at any time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Why do some ads have functions that are disabled ?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Some advertising featured in the iAd Gallery include content that is not currently available, and so it is disabled.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Where can I find iAd advertisements outside of the iAd Gallery ?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;You can find iAd advertisements in many of your favorite applications. Every iAd is identified on the lower-right corner of the ad.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-YlwJGR_t50Q/TaEOaFyoejI/AAAAAAAAC0A/6dey52lp98E/s1600/HT4538_2-iads-corner-002-en.png" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;How do I find out more about iAd advertising ?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For more information about advertising on the iAd Network, please visit &lt;a href="http://advertising.apple.com/"&gt;http://advertising.apple.com/&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;For more information about how you can earn money by running iAd advertising in your apps, please visit &lt;a href="http://developer.apple.com/iad/"&gt;http://developer.apple.com/iad/&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-2651910281155916559?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/2651910281155916559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2011/04/iad-gallery-faq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/2651910281155916559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/2651910281155916559'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2011/04/iad-gallery-faq.html' title='iAd Gallery - FAQ'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-oKeZAO7DOms/TaEOZBdE9iI/AAAAAAAACz8/dfA-b3DSBQA/s72-c/HT4538_1-iads-loved-002-en.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-3155880702954470536</id><published>2010-09-30T18:25:00.000-07:00</published><updated>2010-10-01T12:46:48.833-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Developer Courses + Tutorials !</title><content type='html'>&lt;div style="margin: 10px 10px 10px 10px;"&gt;Unless you’ve been living under a rock, you know that the iPhone is a big deal and it’s one of the most popular subjects of development these days. Lots of developers are creating their own iPhone apps, and with the right know-how, you can too. Check out our list of courses and tutorials to learn everything that’s important about developing for the iPhone.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;University&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Here you’ll find iPhone development courses offered by top universities.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.stanford.edu/class/cs193p/cgi-bin/index.php"&gt;iPhone Application Programming&lt;/a&gt;&lt;/b&gt;: Learn about programming for the iPhone from Stanford on iTunes. [Stanford]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://courses.csail.mit.edu/iphonedev/"&gt;Introduction to iPhone Application Development&lt;/a&gt;&lt;/b&gt;: Use this course’s posted slides to get a crash course in iPhone application development. [MIT]&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Apple Resources&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;You can learn about iPhone development straight from the source with these Apple documents.&lt;br /&gt;&lt;ol start="3"&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/referencelibrary/GettingStarted/GS_iPhoneGeneral/index.html"&gt;Getting Started with iPhone&lt;/a&gt;&lt;/b&gt;: Here you’ll find a general introduction to iPhone development. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/OOP_ObjC/Articles/ooOOP.html#//apple_ref/doc/uid/TP40005149-CH8-SW1"&gt;Object-Oriented Programming with Objective-C&lt;/a&gt;&lt;/b&gt;: This document offers an excellent guide for object oriented programming. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/codinghowtos/NetworkingAndInternet/index.html"&gt;Networking &amp;amp; Internet Coding How-Tos&lt;/a&gt;&lt;/b&gt;: In this resource, you will find lots of great advice for networking and Internet development on the iPhone. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/referencelibrary/GettingStarted/GS_AudioVideo_iPhone/index.html"&gt;Getting Started with Audio &amp;amp; Video&lt;/a&gt;&lt;/b&gt;: Use this document to get started with audio and video features in iPhone applications. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhone101/Articles/chapter_1_section_1.html"&gt;Your First iPhone Application&lt;/a&gt;&lt;/b&gt;: This introductory tutorial offers a step by step description of getting started with an iPhone application. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/referencelibrary/GettingStarted/GS_Performance_iPhone/index.html"&gt;Getting Started with Performance&lt;/a&gt;&lt;/b&gt;: This guide offers an introduction to improving the performance on iPhone apps. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/index.html"&gt;iPhone Application Programming Guide&lt;/a&gt;&lt;/b&gt;: Get an introduction to the iPhone OS and development process. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/index.html"&gt;iPhone OS Technology Overview&lt;/a&gt;&lt;/b&gt;: Learn about the iPhone OS and its technologies from this guide. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/referencelibrary/GettingStarted/GS_DataManagement_iPhone/index.html"&gt;Getting Started with Data Management&lt;/a&gt;&lt;/b&gt;: Here you’ll find a reference that will help you with data management. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/documentation/Security/Conceptual/Security_Overview/index.html"&gt;Security Overview&lt;/a&gt;&lt;/b&gt;: Get an understanding of the security concepts on the iPhone from this resource. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/documentation/Performance/Conceptual/PerformanceOverview/index.html"&gt;Performance Overview&lt;/a&gt;&lt;/b&gt;: Get a look at the factors that determine performance through this guide. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/documentation/Cocoa/Conceptual/LoadingResources/index.html"&gt;Resource Programming Guide&lt;/a&gt;&lt;/b&gt;: Check out this resource to learn how to work with nib and bundle resources.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/referencelibrary/GettingStarted/GS_UserExperience_iPhone/index.html"&gt;Getting Started with User Experience&lt;/a&gt;&lt;/b&gt;: This document offers an introduction to constructing iPhone application user interfaces. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html"&gt;iPhone Human Interface Guidelines&lt;/a&gt;&lt;/b&gt;: Follow these guidelines to make sure your iPhone app has a good human interface. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html"&gt;iPhone Development Guide&lt;/a&gt;&lt;/b&gt;: Use this development guide to get an introduction to creating web apps on the iPhone. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/documentation/Cocoa/Conceptual/DataFormatting/index.html"&gt;Data Formatting Programming Guide for Cocoa&lt;/a&gt;&lt;/b&gt;: This guide will teach you how to use Cocoa formatters for data. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/referencelibrary/GettingStarted/GS_Tools_iPhone/index.html"&gt;Getting Started with Tools&lt;/a&gt;&lt;/b&gt;: You will find a guided introduction to the Xcode toolset from this document. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/codinghowtos/DataManagement/index.html"&gt;Data Management Coding How-tos&lt;/a&gt;&lt;/b&gt;: Get answers to common data management coding questions. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/ObjCTutorial/01Introduction/chapter_1_section_1.html#//apple_ref/doc/uid/TP40000863-CH13-DontLinkElementID_3"&gt;Introduction to Cocoa Application Tutorial&lt;/a&gt;&lt;/b&gt;: You’ll need at least a base level understanding of Cocoa for iPhone development, which you can check out in this tutorial. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/documentation/Cocoa/Conceptual/CoreAnimation_guide/index.html"&gt;Core Animation Programming Guide&lt;/a&gt;&lt;/b&gt;: Follow this guide to get the main components and services of Core Animation. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/documentation/Cocoa/Conceptual/CodingGuidelines/index.html"&gt;Coding Guidelines for Cocoa&lt;/a&gt;&lt;/b&gt;: In this guide, you’ll learn about naming guidelines for the Cocoa API as well as design advice. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/referencelibrary/GettingStarted/GS_Graphics_iPhone/index.html"&gt;Getting Started with Graphics and Animation&lt;/a&gt;&lt;/b&gt;: Follow this guide for an introduction to 2D and 3D graphics and animation. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iphone/gettingstarted/docs/objectivecprimer.action"&gt;Learning Objective-C: A Primer&lt;/a&gt;&lt;/b&gt;: Check out this document once you’ve worked through object oriented programming and Cocoa. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/index.html"&gt;Cocoa Fundamentals Guide&lt;/a&gt;&lt;/b&gt;: You’ll learn about the basic concepts, terminology, and more in Cocoa from this guide. [Apple]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://developer.apple.com/iPhone/library/codinghowtos/GraphicsAndAnimation/index.html"&gt;Graphics and Animation Coding How-Tos&lt;/a&gt;&lt;/b&gt;: In this resource, you’ll find lots of great tips and advice for graphics and animation on the iPhone. [Apple]&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Getting Started&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Get an introduction to iPhone development through these tutorials.&lt;br /&gt;&lt;ol start="28"&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.daleisphere.com/iphone-app-development-where-to-start/"&gt;iPhone App Development-Where to Start&lt;/a&gt;&lt;/b&gt;: This tutorial will teach you how to get started in iPhone app development. [The Daleisphere]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://furbo.org/2009/02/19/bootstrap/"&gt;Bootstrap&lt;/a&gt;&lt;/b&gt;: Learn a few pointers for iPhone development from this resource. [furbo]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://nettuts.com/misc/learn-how-to-develop-for-the-iphone/"&gt;Learn How to Develop for the iPhone&lt;/a&gt;&lt;/b&gt;: This tutorial will show you how to build an alternate page and style sheet for the iPhone. [NETTUTS]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://weblog.openlaszlo.org/archives/2007/09/iphone-application-development-step-by-step/"&gt;iPhone Application Development, Step By Step&lt;/a&gt;&lt;/b&gt;: In this tutorial, you will find a step by step guide to creating a simple iPhone game. [Open Laszlo]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonesdkarticles.com/2008/07/first-iphone-application.html"&gt;First iPhone Application&lt;/a&gt;&lt;/b&gt;: Get a brief introduction to creating your first iPhone application. [iPhone SDK Articles]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://lucasnewman.com/phonedev.pdf"&gt;iPhone Dev&lt;/a&gt;&lt;/b&gt;: Check out this PDF to get a tutorial for iPhone development. [Lucas Newman]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://how-to-iphone-application/"&gt;iPhone App Development for Web Hackers&lt;/a&gt;&lt;/b&gt;: Use this tutorial to learn about geo-location features and beginner development tips. [How to Iphone Application]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.webmonkey.com/blog/How_to_Write_an_iPhone_App"&gt;How to Write an iPhone App&lt;/a&gt;&lt;/b&gt;: This tutorial gives you a basic look at what it takes to write an iPhone application. [Webmonkey]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://dominiek.com/articles/2008/7/19/iphone-app-development-for-web-hackers"&gt;iPhone App Development for Web Hackers&lt;/a&gt;&lt;/b&gt;: In this article, you’ll learn about web hacking development for the iPhone. [Dominiek]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://pragprog.com/screencasts/v-bdiphone/writing-your-first-iphone-application"&gt;Writing Your First iPhone Application&lt;/a&gt;&lt;/b&gt;: Bill Dudney will walk you through all of the tools and pieces of knowledge you’ll need to write your first iPhone application. [The Pragmatic Bookshelf]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.cimgf.com/2008/10/01/cocoa-touch-tutorial-iphone-application-example/"&gt;Cocoa Touch Tutorial: iPhone Application Example&lt;/a&gt;&lt;/b&gt;: This tutorial will show you how to make a very basic Cocoa Touch application with Interface Builder. [Cocoa Is My Girlfriend]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://bakery.cakephp.org/articles/view/building-an-iphone-app-in-a-day"&gt;Building an iPhone app in a day&lt;/a&gt;&lt;/b&gt;: Check out this tutorial to see how you can build a useful app quickly. [The Bakery]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://apcmag.com/seven_things_all_iphone_apps_need.htm"&gt;Seven Things All iPhone Apps Need&lt;/a&gt;&lt;/b&gt;: Check out this list to see what’s essential when creating an iPhone app. [APCmag]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://alistapart.com/articles/putyourcontentinmypocket"&gt;Put Your Content in My Pocket&lt;/a&gt;&lt;/b&gt;: Learn how to use the iPhone web browser to your advantage from this article. [A List Apart]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.roseindia.net/ittraining/iPhone-Development-Training.shtml"&gt;iPhone Training Course&lt;/a&gt;&lt;/b&gt;: Become a master at writing iPhone applications through this course. [Rose India]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://furbo.org/2008/02/11/so-youre-going-to-write-an-iphone-app/"&gt;So you’re going to write an iPhone app…&lt;/a&gt;&lt;/b&gt;: Learn about code reuse, memory, and more from this tutorial. [furbo]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://net.tutsplus.com/tutorials/tools-and-tips/learn-how-to-develop-for-the-iphone/"&gt;Learn How to Develop for the iPhone&lt;/a&gt;&lt;/b&gt;: Check out this tutorial to see how to build an alternative page and style sheet for the iPhone. [Net Tuts]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://dotnetslackers.com/articles/aspnet/DevelopingForTheiPhone.aspx"&gt;Developing for the iPhone&lt;/a&gt;&lt;/b&gt;: This resource will show you how to develop ASP.NET applications for the iPhone. [Dot Net Slackers]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://blogs.zdnet.com/Burnette/?p=681"&gt;Getting Started with iPhone Development&lt;/a&gt;&lt;/b&gt;: Ed Burnette offers a basic introduction to iPhone development. [ZDnet]&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Tools&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;These tutorials will teach you how to use specific tools in order to create iPhone apps.&lt;br /&gt;&lt;ol start="47"&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://net.tutsplus.com/tutorials/php/make-an-iphone-app-using-the-envato-api/"&gt;Make an iPhone App Using the Envato API&lt;/a&gt;&lt;/b&gt;: Make your own iPhone app with the Envato API with the help of this tutorial. [Net Tuts]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-eclipse-iphoneruby1/index.html"&gt;Developing iPhone Applications using Ruby on Rails and Eclipse&lt;/a&gt;&lt;/b&gt;: Learn how to detect mobile Safari from a Ruby on Rails application through this tutorial. [IBM]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.mobileorchard.com/14-essential-xcode-tips-tricks-and-resources-for-iphone-devs/"&gt;14 Essential Xcode Tips, Tricks and Resources for iPhone Devs&lt;/a&gt;&lt;/b&gt;: Learn how to make sense of xcode with this helpful resource. [Mobile Orchard]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.ibm.com/developerworks/opensource/library/os-eclipse-iphone/"&gt;Develop iPhone Web Applications with Eclipse&lt;/a&gt;&lt;/b&gt;: This tutorial will help you learn how to create iPhone applications with Aptana’s iPhone development plug-in. [IMB]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.mobileorchard.com/build-an-iphone-webapp-in-minutes-with-ruby-sinatra-and-iui/"&gt;Build an iPhone Webapp in Minutes with Ruby, Sinatra, and iUI&lt;/a&gt;&lt;/b&gt;: You can learn how to quickly put together an iPhone app with these tools. [Mobile Orchard]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.ibm.com/developerworks/xml/library/x-iphonexmlphp/"&gt;iPhone Development with PHP and XML&lt;/a&gt;&lt;/b&gt;: In this tutorial, you’ll get a look at developing custom applications for the iPhone. [IBM]&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Details&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;These tutorials cover all of the important details in iPhone app development.&lt;br /&gt;&lt;ol start="53"&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.mobileorchard.com/avoiding-iphone-app-rejection-from-apple/"&gt;Avoiding iPhone App Rejection from Apple&lt;/a&gt;&lt;/b&gt;: This tutorial holds the secrets to making sure your iPhone app makes the cut. [Mobile Orchard]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.cimgf.com/2008/11/13/landscape-tab-bar-application-for-the-iphone/"&gt;Landscape Tab Bar Application for the iPhone&lt;/a&gt;&lt;/b&gt;: Follow this tutorial to learn about making the tab bar application support landscape orientation. [Cocoa Is My Girlfriend]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://icodeblog.com/2009/02/20/iphone-programming-tutorial-using-openurl-to-send-email-from-your-app/"&gt;iPhone Programming Tutorial-Using openURL to Send Email from Your App&lt;/a&gt;&lt;/b&gt;: This tutorial explains how you can send email through applications, and even pre-fill fields. [iCode]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonesdkarticles.com/2008/09/multi-touch-tutorial.html"&gt;Multi Touch Tutorial&lt;/a&gt;&lt;/b&gt;: This tutorial will show you how you can respond to a tap event. [iPhone SDK Articles]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://theappleblog.com/2009/04/15/iphone-dev-sessions-create-a-navigation-based-application/"&gt;Create a Navigation-Based Application&lt;/a&gt;&lt;/b&gt;: This tutorial will teach you how to create and run a navigation-based application from XCode.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://dotnetslackers.com/articles/aspnet/AdvancediPhoneDevelopment.aspx"&gt;Advanced iPhone Development&lt;/a&gt;&lt;/b&gt;: Go beyond the basics with this iPhone development tutorial. [Dot Net Slackers]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://howtomakeiphoneapps.com/2009/03/heres-a-quick-way-to-deal-with-dates-in-objective-c/"&gt;Here’s a Quick Way to Deal with Dates in Objective C&lt;/a&gt;&lt;/b&gt;: Get information on dealing with date fetching through this tutorial. [Howtomakeiphoneapps]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonesdkarticles.com/2008/09/navigation-controller-uitoolbar.html"&gt;Navigation Controller + UIToolbar&lt;/a&gt;&lt;/b&gt;: Through this tutorial, you can learn how to add a UIToolbar to an app. [iPhone SDK Articles]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.markj.net/iphone-asynchronous-table-image/"&gt;iPhone Asynchonous Table Image&lt;/a&gt;&lt;/b&gt;: Follow this thorough article to learn about loading multiple images in your iPhone app in an asynchonous manner. [Markj]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonesdkarticles.com/2008/11/localizing-iphone-apps.html"&gt;Localizing iPhone Apps-Internationalization&lt;/a&gt;&lt;/b&gt;: You can use resource files to display text in a user’s language-learn how in this tutorial. [iPhone SDK Articles]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.mobileorchard.com/tutorial-json-over-http-on-the-iphone/"&gt;Tutorial: JSON Over HTTP on the iPhone&lt;/a&gt;&lt;/b&gt;: With this tutorial, you’ll get a step by step how-to for JSON web services through an iPhone app. [Mobile Orchard]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://craiggiles.wordpress.com/2009/01/14/parsing-xml-on-the-iphone/"&gt;Parsing xml on the iPhone&lt;/a&gt;&lt;/b&gt;: This tutorial will show you how to parse XML using the iPhone SDK. [Craig Giles]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://dblog.com.au/iphone-development-tutorials/iphone-sdk-tutorial-reading-data-from-a-sqlite-database/"&gt;Reading data from a SQLite Database&lt;/a&gt;&lt;/b&gt;: Here you’ll find a quick tutorial for reading data from a SQLite database. [dBlog]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://theappleblog.com/2009/04/08/iphone-dev-sessions-how-to-make-an-orientation-aware-clock/"&gt;How to Make an Orientation-Aware Clock&lt;/a&gt;&lt;/b&gt;: Through this tutorial, you’ll learn about building a simple, orientation-aware clock. [The Apple Blog]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.mobileorchard.com/find-iphone-memory-leaks-a-leaks-tool-tutorial/"&gt;Finding iPhone Memory Leaks&lt;/a&gt;&lt;/b&gt;: Carefully find iPhone memory leaks by using this tutorial. [Mobile Orchard]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonesdkarticles.com/2008/11/localizing-iphone-apps-part-1.html"&gt;Localizing iPhone Apps&lt;/a&gt;&lt;/b&gt;: MAke sure that your iPhone app is properly formatted according to a user’s native country or region with the help of this tutorial. [iPhone SDK Articles]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.gehacktes.net/2009/03/iphone-programming-part-6-multiple-sounds-with-openal/"&gt;OpenAL Audio Programming on iPhone&lt;/a&gt;&lt;/b&gt;: Here you’ll get code snippets, learning, and more. [Gehaktes]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.mobileorchard.com/iphone-memory-management/"&gt;9 iPhone Memory Management Links and Resources&lt;/a&gt;&lt;/b&gt;: Here you’ll find a variety of iPhone memory management resources that can help you get things under control. [Mobile Orchard]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonesdkarticles.com/2008/11/parsing-xml-files.html"&gt;Parsing XML Files&lt;/a&gt;&lt;/b&gt;: Get an understanding of how you can parse XML files with this tutorial. [iPhone SDK Articles]&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;User Interface&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;These tutorials are all about the user interface and interaction.&lt;br /&gt;&lt;ol start="72"&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonesdkarticles.com/2009/03/uitableview-drill-down-table-view.html"&gt;UITableView-Drill down table view tutorial&lt;/a&gt;&lt;/b&gt;: Check out this tutorial to learn how to make a drill down table view. [iPhone SDK Articles]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://icodeblog.com/2008/12/19/iphone-coding-learning-about-uiwebviews-by-creating-a-web-browser/"&gt;iPhone Coding-Learning About UIWebViews by Creating a Web Browser&lt;/a&gt;&lt;/b&gt;: In this tutorial, you’ll learn about UIWebViews through the creation of a browser. [iCode]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://blogs.njit.edu/cs485-iphone/2009/03/24/guest-lecture-by-david-choi/"&gt;Design Patterns on the iPhone&lt;/a&gt;&lt;/b&gt;: Check out David Choi’s guest lecture on user interface design for the iPhone. [New Jersey Institute of Technology]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonesdkarticles.com/2009/02/uitableview-adding-subviews-to-cells.html"&gt;UITableView-Adding subviews to a cell’s content view&lt;/a&gt;&lt;/b&gt;: This tutorial will show you how to customize the UITableViewCell. [iPhone SDK Articles]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonesdkarticles.com/2009/03/drill-down-table-view-with-detail-view.html"&gt;Drill down table view with a detail view&lt;/a&gt;&lt;/b&gt;: Learn how to load a different detail view on the UITabBarController. [iPhone SDK Articles]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://arstechnica.com/apple/guides/2009/02/iphone-development-accessing-uicolor-components.ars"&gt;Extending the iPhone’s SDK’s UIColor Class&lt;/a&gt;&lt;/b&gt;: Learn how to extend the iPhone SDK UIColor class, and get code samples from this article. [Ars Technica]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonesdkarticles.com/2009/01/uitableview-indexed-table-view.html"&gt;UITableView&lt;/a&gt;&lt;/b&gt;: Learn how to make a simple index for the table view with this tutorial. [iPhone SDK Articles]&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Building Tutorials&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Check out these tutorials where you’ll build a specific app, and learn more about iPhone development along the way.&lt;br /&gt;&lt;ol start="79"&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://theappleblog.com/2008/08/04/tutorial-build-a-simple-rss-reader-for-iphone/"&gt;Build a Simple RSS Reader for the iPhone&lt;/a&gt;&lt;/b&gt;: Get walked through the creation of an RSS reader for a simple feed on the iPhone. [The Apple Blog]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://craiggiles.wordpress.com/2009/01/30/iphone-gaming-framework-stage-1-tutorial/"&gt;iPhone Gaming Framework&lt;/a&gt;&lt;/b&gt;: This article offers a look at writing code for iPhone game developers. [Craig Giles]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://theappleblog.com/2008/08/04/tutorial-build-a-simple-rss-reader-for-iphone/"&gt;Build a Simple RSS Reader for the iPhone&lt;/a&gt;&lt;/b&gt;: Follow this tutorial, and you’ll learn about building a simple iPhone RSS reader.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://icodeblog.com/2009/01/15/iphone-game-programming-tutorial-part-1/"&gt;iPhone Game Programming Tutorial&lt;/a&gt;&lt;/b&gt;: This multipart tutorial offers a way to learn OpenGL and Quartz for iPhone development. [iCode]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://dblog.com.au/iphone-development/iphone-sdk-tutorial-build-your-very-own-web-browser/"&gt;Build your very own Web browser!&lt;/a&gt;&lt;/b&gt;: Follow this tutorial to learn about the process of building your own iPhone web browser. [dBlog]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://weblog.openlaszlo.org/archives/2007/09/iphone-application-development-step-by-step/"&gt;iPhone application development, step by step&lt;/a&gt;&lt;/b&gt;: Find out how to build the iPhone application NEWSMATCH using OpenLaszlo. [OpenLaszlo]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://dblog.com.au/general/iphone-sdk-tutorial-building-an-advanced-rss-reader-using-touchxml-part-1/"&gt;Building an Advanced RSS Reader using TouchXML&lt;/a&gt;&lt;/b&gt;: Get step by step information for creating an advanced iPhone RSS reader from this tutorial. [DBlog]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://dblog.com.au/general/iphone-sdk-tutorial-building-an-advanced-rss-reader-using-touchxml-part-1/"&gt;iPhone SDK Tutorial: Building an Advanced RSS Reader Using TouchXML&lt;/a&gt;&lt;/b&gt;: This tutorial will help you learn more about iPhone development by building an advanced RSS reader with TouchXML. [dBlog]&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Videos&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Watch these videos for a visual guide to iPhone app development.&lt;br /&gt;&lt;ol start="87"&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonedevcentral.org/tutorials.php?page=ViewTutorial&amp;amp;id=16&amp;amp;uid=85906760"&gt;Basic iPhone Programming&lt;/a&gt;&lt;/b&gt;: Check out this video to get started with iPhone programming. [iPhone Dev Central]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.youtube.com/watch?v=hoA1MBRJ_BA"&gt;First Step Towards the App Store&lt;/a&gt;&lt;/b&gt;: Work towards getting your app in the app store with the help of this tutorial. [You Tube]&lt;/li&gt;&lt;li&gt;Hello World: This tutorial will help you learn the basics of iPhone programming. [iPhone Dev Central]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.youtube.com/watch?v=e0zi5pQgpaY"&gt;UITableView iPhone Programming Tutorial&lt;/a&gt;&lt;/b&gt;: Watch this video to learn how to populate a UITableView. [YouTube]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.youtube.com/watch?v=Tz9mzB2fWhs"&gt;iPhone App Tutorial 1&lt;/a&gt;&lt;/b&gt;: Check out this video to quickly learn about Interface Builder. [YouTube]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.iphonedevcentral.org/tutorials.php?page=ViewTutorial&amp;amp;id=19&amp;amp;uid=3928739"&gt;iPhone IB-Your First App&lt;/a&gt;&lt;/b&gt;: Watch this tutorial to learn how to use the Interface Builder. [iPhone Dev Central]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.youtube.com/watch?v=EoVl6sFgXIQ"&gt;Understanding Source Code&lt;/a&gt;&lt;/b&gt;: Learn how to get started with development on the iPhone through this video tutorial. [YouTube]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.youtube.com/watch?v=R_6a90NW3i4&amp;amp;feature=related"&gt;How to Make an iPhone App&lt;/a&gt;&lt;/b&gt;: Create an iPhone app using Jiggy and this tutorial. [YouTube]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.youtube.com/watch?v=zGbC6T5Ero0"&gt;iPhone Development with Dashcode&lt;/a&gt;&lt;/b&gt;: Find out how to develop iPhone applications with Dashcode through this tutorial. [YouTube]&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Development Resources&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;These resources are not courses or tutorials, but they are incredibly valuable resources for beginner iPhone app developers.&lt;br /&gt;&lt;ol start="96"&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://my.safaribooksonline.com/9780596518554"&gt;iPhone Open Application Development&lt;/a&gt;&lt;/b&gt;: This book will teach you how to create software for the iPhone environment. [Safari Books Online]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.teehanlax.com/blog/?p=447"&gt;iPhone GUI PSD File&lt;/a&gt;&lt;/b&gt;: Use this set to get a comprehensive, editable library of iPhone UI assets. [Teehanlax]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.mobileorchard.com/31-iphone-applications-with-source-code/"&gt;31 iPhone Applications with Source Code&lt;/a&gt;&lt;/b&gt;: Teach yourself how to create iPhone apps by taking a look at the code in these. [Mobile Orchard]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.marketcircle.com/iphoney/"&gt;iPhoney&lt;/a&gt;&lt;/b&gt;: Using iPhoney, you’ll be able to see how your creation will look on the iPhone. [Market Circle]&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://speckyboy.com/2008/07/18/35-free-icon-sets-for-your-iphone-pimp-it-up/"&gt;35 Free iPhone Icon Sets&lt;/a&gt;&lt;/b&gt;: Check out this resource to find a great variety of iPhone icons.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-3155880702954470536?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/3155880702954470536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/developer-courses-tutorials.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/3155880702954470536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/3155880702954470536'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/developer-courses-tutorials.html' title='Developer Courses + Tutorials !'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-1109982535779663268</id><published>2010-09-30T18:18:00.000-07:00</published><updated>2010-10-01T12:46:48.892-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><title type='text'>Dashboard Widget Tutorial</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_92YmW8QqZrI/TKU0tmxQL3I/AAAAAAAAHPY/H7wtyLi_7Jg/s1600/apple_birthday_widget.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;This tutorial walks you through using Dashcode to create a Dashboard widget. As you follow the steps, you learn how to choose a widget template, customize your widget’s appearance and code, and share your widget with others. Completing this tutorial is a quick and easy way to get started building Dashboard widgets in Dashcode.&lt;br /&gt;&lt;br /&gt;This document includes two additional tutorials, “&lt;a href="http://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/Dashcode_UserGuide/Contents/Resources/en.lproj/MakingaWebApp/MakingaWebApp.html#//apple_ref/doc/uid/TP40004692-CH18-SW1"&gt;Mobile Safari Web Application Tutorial&lt;/a&gt;” and “&lt;a href="http://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/Dashcode_UserGuide/Contents/Resources/en.lproj/MakingDualPlatformWebApp/MakingDualPlatformWebApp.html#//apple_ref/doc/uid/TP40004692-CH19-SW2"&gt;Dual-Product Web Application Tutorial&lt;/a&gt;,” which follow this one. The remainder of the document delves more deeply into the Dashcode development environment, describing how it supports both widget and web application development. If you don’t want to learn how to create a web application, you can continue learning more about Dashcode by reading “&lt;a href="http://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/Dashcode_UserGuide/Contents/Resources/en.lproj/WidgetProjects/WidgetProjects.html#//apple_ref/doc/uid/TP40004692-CH4-SW1"&gt;Starting a Project&lt;/a&gt;.”&lt;br /&gt;&lt;br /&gt;Before You Begin !&lt;br /&gt;&lt;br /&gt;In this tutorial, you build a Dashboard widget that counts down to your birthday, similar to the widget shown in Figure 1-1.&lt;br /&gt;&lt;br /&gt;Figure 1-1&amp;nbsp; &lt;b&gt;The Birthday widget&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_92YmW8QqZrI/TKU0tmxQL3I/AAAAAAAAHPY/H7wtyLi_7Jg/s1600/apple_birthday_widget.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKU0tmxQL3I/AAAAAAAAHPY/H7wtyLi_7Jg/s1600/apple_birthday_widget.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Before continuing, make sure that you have Dashcode installed on your Mac (the location is /Developer/Applications/). If you don’t have Dashcode installed, read “&lt;a href="http://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/Dashcode_UserGuide/Contents/Resources/en.lproj/Introduction/Introduction.html#//apple_ref/doc/uid/TP40004692-CH1-SW2"&gt;Getting and Running Dashcode&lt;/a&gt;” to learn how to get and install Dashcode.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_92YmW8QqZrI/TKU0u5DvzWI/AAAAAAAAHPc/3cDCQjdhCPo/s1600/canvas_inspector.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;Choose a Template&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To start, double-click the Dashcode icon to open it. A new project window opens and displays a dialog in which you first select the type of project you’re interested in—in this case, Dashboard—and then, the kind of widget you want to create from an assortment of templates. Templates are handy starting points for creating common types of widgets. Select a template’s icon to show a short description of what that template does.&lt;br /&gt;&lt;br /&gt;To make the Birthday widget, this tutorial uses the Countdown template. Select its icon and click Choose. A project window opens with a new widget based on the Countdown template, as shown in Figure 1-2.&lt;br /&gt;&lt;br /&gt;Figure 1-2&amp;nbsp; &lt;b&gt;A project window showing a new Dashboard widget&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_92YmW8QqZrI/TKU0wS6IdcI/AAAAAAAAHPk/M5YPJcTuyf8/s1600/project_window.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="516" src="http://2.bp.blogspot.com/_92YmW8QqZrI/TKU0wS6IdcI/AAAAAAAAHPk/M5YPJcTuyf8/s640/project_window.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Along the left side of the project window is the navigator, which you use to switch between the various tools available when you’re designing a widget. The main portion of the window is the canvas, which you use to design your widget’s interface.&lt;br /&gt;&lt;br /&gt;At the bottom of the navigator in Figure 1-2 you can see the Workflow Steps list, which guides you through the widget development process. Each step is a milestone in creating a widget, telling you what to do and where to do it. When you complete a step, mark it as done and move on to the next step.&lt;br /&gt;&lt;br /&gt;Note: If you don’t want to see the Workflow Steps list, you can hide it by choosing View &amp;gt; Steps or by clicking the button that looks like a checkbox at the bottom edge of the project window (this button is highlighted in Figure 1-2).&lt;br /&gt;Alternatively, you can view a list of the widget’s files in place of the Workflow Steps list. If you want to see the Files list, choose View &amp;gt; Files or click the list button in the bottom edge of the project window (it’s the button that looks like a bulleted list).&lt;br /&gt;Set the Target Date&lt;br /&gt;&lt;br /&gt;The Countdown template gives you a Dashboard widget with all the elements and code needed to count down to an event. All you need to do is tell the widget the target date. To set the target date, select Widget Attributes in the navigator. The canvas is replaced by the widget attributes pane, in which you specify important values that your widget needs.&lt;br /&gt;&lt;br /&gt;In the Properties section of the widget attributes pane, choose Date and Time in the Target Kind pop-up menu and enter the date of your next birthday, as shown in Figure 1-3.&lt;br /&gt;&lt;br /&gt;Figure 1-3&amp;nbsp; &lt;b&gt;The Countdown template’s properties&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_92YmW8QqZrI/TKU0vS_1RPI/AAAAAAAAHPg/eBv0LcTpt0Q/s1600/countdown_attributes.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKU0vS_1RPI/AAAAAAAAHPg/eBv0LcTpt0Q/s1600/countdown_attributes.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Test the Countdown&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Your new Dashboard widget is already fully functional. To prove this, choose Debug &amp;gt; Run to run the widget. Dashcode can run a widget without opening it in Dashboard, making it a handy place to test your widget and fix any problems you encounter. After the widget loads, it starts counting down towards your next birthday.&lt;br /&gt;&lt;br /&gt;When you’re satisfied that your widget is working as you expect, choose Debug &amp;gt; Stop to stop it.&lt;br /&gt;&lt;br /&gt;Now is a good time to save your widget project. Choose File &amp;gt; Save to save the project. Give your project a name and select a location to save it in. Your widget is saved in a widget project that encapsulates the widget and information Dashcode needs to create the widget for you.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Customize the Widget’s Appearance&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Although you now have a fully functioning Dashboard widget that’s ready to share, you might want to personalize it to make it unique. Dashcode’s design tools make it easy to customize your widget’s interface. Select the widget item in the navigator (it should display the name you gave it when you saved the project). The widget attributes pane is replaced with the canvas.&lt;br /&gt;&lt;br /&gt;First, change your widget’s body color. Select the widget body (also called the front image or frontImg) on the canvas and then choose Window &amp;gt; Show Inspector. The inspector window allows you to modify a selected element’s properties, such as its appearance and behavior. Click the Fill &amp;amp; Stroke button at the top of the inspector window (it’s the second from the left). If it’s not already selected, click the Style tab to reveal fill, stroke, corner roundness, and opacity values. Click the color well and choose a new color in the Colors window that appears. Try different fill styles until you find a combination that you like. If you want to try changing other effects, such as the glass appearance, click the Effects tab to reveal these values, as shown in Figure 1-4.&lt;br /&gt;&lt;br /&gt;Figure 1-4&amp;nbsp; &lt;b&gt;Tweaking the front image using the Fill &amp;amp; Stroke inspector&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_92YmW8QqZrI/TKU0u5DvzWI/AAAAAAAAHPc/3cDCQjdhCPo/s1600/canvas_inspector.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_92YmW8QqZrI/TKU0u5DvzWI/AAAAAAAAHPc/3cDCQjdhCPo/s1600/canvas_inspector.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When you’re finished customizing your widget’s body, add a photo of yourself from iPhoto to the widget. Your iPhoto library is available from the Library window. To show your iPhoto library, choose Window &amp;gt; Show Library; then click the Photos button. Find a photo and drag it to your widget on the canvas. Resize it by dragging any of the resize handles on the photo.&lt;br /&gt;&lt;br /&gt;Finally, change the Event Label text to something like “...days until my birthday.“ You can do this by selecting the Event Label text, clicking the Attributes button in the inspector window (it’s the leftmost button), and entering the text in the Value field, or by double-clicking the text in the widget body itself and entering the new text.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Add Functionality Using Parts&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now that you have a personalized Dashboard widget that counts down to your birthday, add a button that, when clicked, shows the Apple Store (so your friends and family can buy you a birthday present!). To add a button to your widget, use a button part. Parts are controls and views used on a widget’s interface.&lt;br /&gt;&lt;br /&gt;To find a button part, choose Window &amp;gt; Show Library and click Parts. You can use the search field at the bottom of the window to help you find a particular part or type of part. From the list of parts, drag the Lozenge Button part from the Library window to your widget’s body. Double-click the button to select its label text, enter the text “Buy me a gift” and press Return. You'll probably need to resize the button to fit the new label.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Write Code to Show the Apple Store&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To make the button take the user to the Apple Store when it’s clicked, you need to add a behavior to the button. In the inspector window, click the Behaviors button (it’s the rightmost button). This shows the Behaviors pane, in which you assign handler functions to events on an object. Select the button on the canvas and double-click in the Handlers column next to the onclick event name. Enter the name of a new function, such as showAppleStore, and press Return. Click the arrow next to the function name you entered to reveal the source code editor below the canvas. Here you write code to add functionality to your widget. Clicking the arrow reveals the showAppleStore function Dashcode inserted in your widget’s code. Between the braces ({ .. }) enter the following line of code:&lt;br /&gt;&lt;br /&gt;&lt;i style="color: #0b5394;"&gt;&lt;span style="font-size: x-small;"&gt;widget.openURL("http://store.apple.com/");&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_92YmW8QqZrI/TKU0w_dGPdI/AAAAAAAAHPo/eU5z_mRXX1Q/s1600/source_code_inspector.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The code in the source code editor should look like that in Figure 1-5.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_92YmW8QqZrI/TKU0w_dGPdI/AAAAAAAAHPo/eU5z_mRXX1Q/s1600/source_code_inspector.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Figure 1-5&amp;nbsp; &lt;b&gt;A function in the source code editor&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_92YmW8QqZrI/TKU0w_dGPdI/AAAAAAAAHPo/eU5z_mRXX1Q/s1600/source_code_inspector.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_92YmW8QqZrI/TKU0w_dGPdI/AAAAAAAAHPo/eU5z_mRXX1Q/s1600/source_code_inspector.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Test your widget again by choosing Debug &amp;gt; Run. Click the button you added and make sure a new Safari window opens with the Apple Store website displayed. Be sure you save your project often to preserve the changes you make.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Deploy Your Widget&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Congratulations! You’ve created your first complete Dashboard widget using Dashcode.&lt;br /&gt;&lt;br /&gt;To open your widget in Dashboard, choose File &amp;gt; Deploy Widget. Click Install in the dialog that appears to view your widget in Dashboard.&lt;br /&gt;&lt;br /&gt;To share your widget with the world, select Run &amp;amp; Share in the navigator. The pane that appears displays the widget project name you chose in “&lt;a href="http://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/Dashcode_UserGuide/Contents/Resources/en.lproj/MakingaWidgetwithDashcode/MakingaWidgetwithDashcode.html#//apple_ref/doc/uid/TP40004692-CH3-SW12"&gt;Test the Countdown&lt;/a&gt;,” but you can replace this with a different name if you want. You can also set the minimum version of Mac OS X your widget should run in. Click Save to Disk to save your widget. You can now email it to friends or post it on your webpage. You can use the File &amp;gt; Compress command in the Finder to archive it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-1109982535779663268?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/1109982535779663268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/dashboard-widget-tutorial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/1109982535779663268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/1109982535779663268'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/dashboard-widget-tutorial.html' title='Dashboard Widget Tutorial'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_92YmW8QqZrI/TKU0tmxQL3I/AAAAAAAAHPY/H7wtyLi_7Jg/s72-c/apple_birthday_widget.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-2422426814490067175</id><published>2010-09-30T18:01:00.000-07:00</published><updated>2010-10-01T12:46:48.912-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ManiacDev'/><category scheme='http://www.blogger.com/atom/ns#' term='Developer Forum'/><title type='text'>Developer Forum</title><content type='html'>&lt;div id="feedCSS1" style="float: left; margin: 0px 0px 0px 0px;"&gt;&lt;script src="http://feeds.feedburner.com/DeveloperForumFeed?format=sigpro" type="text/javascript" &gt;&lt;/script&gt;&lt;noscript&gt; &lt;/noscript&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-2422426814490067175?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/2422426814490067175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/developer-forum.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/2422426814490067175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/2422426814490067175'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/developer-forum.html' title='Developer Forum'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-7276296339569016345</id><published>2010-09-30T11:50:00.000-07:00</published><updated>2010-10-01T12:46:49.000-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iOS Developer News'/><title type='text'>iOS Developer News</title><content type='html'>&lt;div id="feedCSS1" style="float: left; margin: 0px 0px 0px 0px;"&gt;&lt;script src="http://feeds.feedburner.com/IosDeveloperNews?format=sigpro" type="text/javascript" &gt;&lt;/script&gt;&lt;noscript&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-7276296339569016345?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/7276296339569016345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/ios-developer-news.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7276296339569016345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7276296339569016345'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/ios-developer-news.html' title='iOS Developer News'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-4065560430510215317</id><published>2010-09-30T11:19:00.000-07:00</published><updated>2010-10-01T13:14:35.759-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Videos'/><title type='text'>RSS Feed Reader Widget !</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;object height="390" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/OYerGfdruQQ&amp;hl=cs_CZ&amp;feature=player_embedded&amp;version=3"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/OYerGfdruQQ&amp;hl=cs_CZ&amp;feature=player_embedded&amp;version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="390"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-4065560430510215317?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/4065560430510215317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/rss-feed-reader-widget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/4065560430510215317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/4065560430510215317'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/rss-feed-reader-widget.html' title='RSS Feed Reader Widget !'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-321066939999680215</id><published>2010-09-30T11:15:00.000-07:00</published><updated>2010-10-01T12:46:49.044-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone SDK'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Apps'/><category scheme='http://www.blogger.com/atom/ns#' term='Dashcode'/><title type='text'>Build Web Apps with Dashcode !</title><content type='html'>When you first launch Dashcode (the easiest way to launch it is through Spotlight), you will see that Dashcode has already created some templates for you to build your Web applications quickly (see Figure 1).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_92YmW8QqZrI/TKS9QBmD55I/AAAAAAAAHMg/W--L1k25EXw/s1600/iphone-dash-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Figure 1: The various templates provided by Dashcode&lt;/div&gt;&lt;br /&gt;The best way to learn is to select each template (other than the Custom template) and examine the content of each application. When you have selected a template, examine their contents and press Command-r to test the application on the iPhone Simulator. Go ahead and have fun with each template. When you have enough fun and get yourself acquainted with the environment, come back and we shall create an iPhone Web application from scratch and you will see how each part is built.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Building the UI&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Alright, now that you are back, create a new Custom project In Dashcode. Notice that by default, Dashcode created a content and a footer parts for you (see Figure 2). Parts are the various views that you seen on your Web applications, such as buttons, text, etc. For this section, you will create a simple currency convertor Web application for the iPhone.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_92YmW8QqZrI/TKS9Tu-3YII/AAAAAAAAHMk/fE4Jz0FOSlU/s1600/iphone-dash-2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Figure 2: The parts in the Custom template&lt;/div&gt;&lt;br /&gt;Select each of these parts and press the delete key. We shall delete these two parts and add our own parts manually.&lt;br /&gt;&lt;br /&gt;Using the Library (Window'Show Library), drag-and-drop a Stack Layout part to the design surface (see Figure 3).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKS-7aASRfI/AAAAAAAAHMo/aZL7qs0utYE/s1600/iphone-dash-3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Figure 3: Using the Library to drag and drop parts onto your application&lt;/div&gt;&lt;br /&gt;Expand the stackLayout part and you should see that it contains two subviews - view1 and view2. Select view1 and change its size to 320px by 356px (see Figure 4) via the Inspector window (Window'Show Inspector). Do the same for view2.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_92YmW8QqZrI/TKS_Msm_kFI/AAAAAAAAHMs/eo42H-wYKkA/s1600/iphone-dash-4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Figure 4: Changing the size for view1 and view2 via the Inspector window&lt;/div&gt;&lt;br /&gt;Double-click on view1 and rename it as mainScreen. Do the same for view2 and rename it as settings (see Figure 5).&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_92YmW8QqZrI/TKS_dWbgB2I/AAAAAAAAHMw/bxSzDm9apV0/s1600/iphone-dash-5.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Figure 5: Renaming the two subviews&lt;/div&gt;&lt;br /&gt;In the Library, drag-and-drop the Rounded Rectangle Shape part onto the mainScreen view (see Figure 6).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_92YmW8QqZrI/TKS_6KZkZMI/AAAAAAAAHM0/RqQcxrUlNa8/s1600/iphone-dash-6.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Figure 6: Adding the Rounded Rectangle Shape part to the subview&lt;/div&gt;&lt;br /&gt;It its Inspector window, select the Fill &amp;amp; Stroke tab and in the Style tab select Gradient fill (see Figure 7) and select two colors.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_92YmW8QqZrI/TKTBjDlQNmI/AAAAAAAAHNA/Fxhk1Jbs0do/s1600/iphone-dash-7_0.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Figure 7: Using the gradient fill to fill the part&lt;/div&gt;&lt;br /&gt;Select the Effects tab and check the Glass and Recess checkboxes (see Figure 8).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_92YmW8QqZrI/TKTEe4eUxYI/AAAAAAAAHNM/d3eppB2et7c/s1600/iphone-dash-8.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Figure 8: Adding glass effect to the part&lt;/div&gt;&lt;br /&gt;Select the Metrics tab and select the Absolute layout (see Figure 9).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_92YmW8QqZrI/TKTGF7IkGuI/AAAAAAAAHNQ/tzlAc4kNFUA/s1600/iphone-dash-9.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;Figure 9: Using absolute layout for parts positioning&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Add the following parts to the Rounded Rectangle Shape part (see Figure 10) and name them as:&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;Text&lt;br /&gt;TextField&lt;br /&gt;Pop-up Menu&lt;br /&gt;Push Button&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKTGTq9pOPI/AAAAAAAAHNU/wxIHAvI7k9U/s1600/iphone-dash-10.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Figure 10: Adding additional parts to the subview&lt;/div&gt;&lt;br /&gt;Select the settings subview and repeat the same steps you have performed above. Figure 11 shows the parts added to the settings subview.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_92YmW8QqZrI/TKTGh-gGHlI/AAAAAAAAHNY/NWpK7A7nG2A/s1600/iphone-dash-11.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Figure 11: Populating the settings subview&lt;/div&gt;&lt;br /&gt;You are now ready to view the application on the iPhone Simulator. Press &lt;b&gt;Command-r&lt;/b&gt; to view the application on the iPhone Simulator (see Figure 12). Notice that the application is hosted by mobile Safari on the iPhone.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_92YmW8QqZrI/TKTGvAnsVTI/AAAAAAAAHNc/tcqhBNKKonk/s1600/Grab+++2010-09-30+at+17.40.20.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Figure 12: Click 'Run' toView the application on the iPhone Simulator&lt;/div&gt;&lt;br /&gt;Notice that you can only see the mainScreen subview. To see the settings subview, you need to write some code to navigate to it from the mainScreen subview.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Coding the Application&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;So you are now ready to write some code. With the mainScreen subview selected, right-click on the Settings button and select Events'onclick (see Figure 13).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKTHHzHZtpI/AAAAAAAAHNg/rX5J_dD2rN8/s1600/iphone-dash-13.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 13: Creating an event handler for the onclick event&lt;/div&gt;&lt;br /&gt;You will be asked to name the event handler for this event. Name it as shown in Figure 14.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_92YmW8QqZrI/TKTHWdWQpNI/AAAAAAAAHNk/QIsEXBBO8yE/s1600/iphone-dash-14.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Figure 14: Naming the handler for the event&lt;/div&gt;&lt;br /&gt;Notice that the code editor now appears at the bottom of the designer (see Figure 15).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKTHi57Q59I/AAAAAAAAHNo/LHZuYCnKSQM/s1600/iphone-dash-15.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Figure 15: The code editor where you can add your code&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Enter the following code:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function btnSettings_ClickHandler(event)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var views = document.getElementById('stackLayout');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var settings = document.getElementById('settings');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (views &amp;amp;&amp;amp; views.object &amp;amp;&amp;amp; settings) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; views.object.setCurrentView(settings);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Select the settings subview and right-click on the Save Settings button and select Events'onclick. Name the handler as btnSave_ClickHandler. Enter the following code:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function btnSave_ClickHandler(event)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var views = document.getElementById('stackLayout');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var front = document.getElementById('mainScreen');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (views &amp;amp;&amp;amp; views.object &amp;amp;&amp;amp; front) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; views.object.setCurrentView(front, true);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Test the application again by pressing Command-r. This time, you will be able to navigate to the settings view by tapping on the Settings button in the mainScreen subview (see Figure 16).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_92YmW8QqZrI/TKTH9OwKCKI/AAAAAAAAHNs/GyzLmXUhux4/s1600/iphone-dash-16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_92YmW8QqZrI/TKTH9OwKCKI/AAAAAAAAHNs/GyzLmXUhux4/s1600/iphone-dash-16.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Figure 16: Tapping on the Settings button navigates to the settings subview&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Database Access&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;So far, your application displays two screens where you can perform some currency conversion as well as set the exchange rates for the different currencies. For simplicity, I am going to assume that you are converting the currencies into Singapore Dollars (SGD). All the exchange rates would be based on the SGD as the base currency.&lt;br /&gt;&lt;br /&gt;To allow the users to store their own exchange rates, you will make use of the local database feature as defined in HTML 5 (which is supported by Mobile Safari). Doing so allows users of your application to store the exchange rate locally on their iPhones.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In the main.js file, add the following lines of code for performing database operations:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var database = null;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The client-side database&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var DB_tableName = "CurrencyKeyValueTable";&amp;nbsp;&amp;nbsp;&amp;nbsp; // database name&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Function: initDB() - Init and create the local database, if possible&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function initDB()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (window.openDatabase) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; database = openDatabase("ExchangeRatesDB", "1.0", &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "Exchange Rates Database", 1000);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (database) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; database.transaction(function(tx) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tx.executeSql("SELECT COUNT(*) FROM " + DB_tableName, [],&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; function(tx, result) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; loadRates();&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; function(tx, error) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Database doesn't exist. Let's create one.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tx.executeSql("CREATE TABLE " + DB_tableName +&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; " (id INTEGER PRIMARY KEY," +&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;nbsp; key TEXT," +&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;nbsp; value TEXT)", [], function(tx, result) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; initRates();&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; loadRates ();&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch(e) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; database = null;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Function: initRates() - Initialize the default exchange rates&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function initRates()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (database) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; database.transaction(function (tx) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tx.executeSql("INSERT INTO " + DB_tableName + &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; " (id, key, value) VALUES (?, ?, ?)", [0, 'USD', 1.44]);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tx.executeSql("INSERT INTO " + DB_tableName + &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; " (id, key, value) VALUES (?, ?, ?)", [1, 'EUR', 2.05]);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tx.executeSql("INSERT INTO " + DB_tableName + &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; " (id, key, value) VALUES (?, ?, ?)", [2, 'AUS', 1.19]);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Function: loadRates() - Load the currency exchange rates from DB&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function loadRates()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var element;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var popUpElement = document.getElementById('popupConvertTo');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (database) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; database.transaction(function(tx) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tx.executeSql("SELECT key, value FROM " + DB_tableName, [],&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; function(tx, result) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i = 0; i &amp;lt; result.rows.length; ++i) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var row = result.rows.item(i);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var key = row['key'];&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var value = row['value'];&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //---populate the pop-up menu part---&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; popUpElement.options[i].text = key;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; popUpElement.options[i].value = value;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (key == 'USD') {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; element = document.getElementById('txtUSD');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (key == 'EUR') {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; element = document.getElementById('txtEUR');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else if (key == 'AUS') {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; element = document.getElementById('txtAUS');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; element.value = value;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; function(tx, error) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; showError('Failed to retrieve stored information from database - ' + &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; error.message);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; loadDefaultRates();&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Function: saveRates() - Save the currency exchange rates into DB&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function saveRates()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (database) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var elementUSD = document.getElementById('txtUSD');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var elementEUR = document.getElementById('txtEUR');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var elementAUS = document.getElementById('txtAUS');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; database.transaction(function (tx) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tx.executeSql("UPDATE " + DB_tableName + " SET key = 'USD', &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; value = ? WHERE id = 0", [elementUSD.value]);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tx.executeSql("UPDATE " + DB_tableName + " SET key = 'EUR', &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; value = ? WHERE id = 1", [elementEUR.value]);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tx.executeSql("UPDATE " + DB_tableName + " SET key = 'AUS', &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; value = ? WHERE id = 2", [elementAUS.value]);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; loadRates();&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Function: deleteTable() - Delete currency exchange table from DB&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function deleteTable()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (window.openDatabase) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; database = openDatabase("ExchangeRatesDB", "1.0", &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; "Exchange Rates Database");&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (database) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; database.transaction(function(tx) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tx.executeSql("DROP TABLE " + DB_tableName, []);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch(e) { &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Function: loadDefaultRates() - Load the default exchange rates&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function loadDefaultRates()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var popUpElement = document.getElementById('popupConvertTo');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var element = document.getElementById('txtUSD');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; element.value = "1.44";&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; popUpElement.options[0].text = "USD";&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; popUpElement.options[0].value = element.value;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; element = document.getElementById('txtEUR');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; element.value = "2.05";&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; popUpElement.options[1].text = "EUR";&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; popUpElement.options[1].value = element.value;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; element = document.getElementById('txtAUS');&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; element.value = "1.19";&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; popUpElement.options[2].text = "AUS";&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; popUpElement.options[2].value = element.value;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The database code above is pretty straightforward - store the exchange rates inside the database and populate the pop-up menu part when the rates are retrieved.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Modify the load() function as follows:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Function: load()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Called by HTML body element's onload event when the Web application is ready to &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // start&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function load()&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; dashcode.setupParts();&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; initDB();&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (!database) {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; loadDefaultRates();&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Press &lt;b&gt;Command-r&lt;/b&gt; to test the application. When the application is loaded, the pop-up menu will now display the three different currencies (see Figure 17).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKTJkJ_6snI/AAAAAAAAHN0/RD_GzAKmSGQ/s1600/iphone-dash-17.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Figure 17: The pop-up menu part displaying the different currencies&lt;/div&gt;&lt;br /&gt;When you tap on the Settings button, the exchange rates would also be displayed in the settings subview (see Figure 18).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKTJu710YJI/AAAAAAAAHN4/zmfoMXoVMuw/s1600/iphone-dash-18.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Figure 18: The exchange rates displayed in the settings subview&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Performing the Conversion&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;You are now ready to perform the actual conversion of the currencies. In Dashcode, select the mainScreen subview and right-click on the Convert! Button and select Events'onclick (see Figure 19).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_92YmW8QqZrI/TKTJ1i6LCcI/AAAAAAAAHN8/RF2OvKD6p-8/s1600/iphone-dash-19.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Figure 19: Handling the onclick event for the Convert! button&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Name the event handler as btnConvert_ClickHandler and code it as follows:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function btnConvert_ClickHandler(event)&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var amount = document.getElementById("txtAmount").value;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var rates = document.getElementById("popupConvertTo").value;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var result = amount * rates;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alert(result);&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #0b5394;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Press &lt;b&gt;Command-r&lt;/b&gt; to test the application. Enter an amount and select the currency to convert. Tapping on the Convert! button will now display the amount converted (see Figure 20).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_92YmW8QqZrI/TKTKCIzExTI/AAAAAAAAHOA/0cPTk0rKI4A/s1600/iphone-dash-20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKTKCIzExTI/AAAAAAAAHOA/0cPTk0rKI4A/s1600/iphone-dash-20.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Figure 20: Try converting some currencies!&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Converting your Web Application into an iPhone Native Application&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Now that your application is completed, you may deploy your application onto a Web server so that users can access your application through the Safari browser on their iPhones. However, since this is a Web application, the user must have access to the Internet, or else there is no way to access your application. And since our application does not make use of any server-based data, it is a good candidate to convert into a native iPhone application. The easiest way would be to host the Web application within the Safari browser, which is represented by the WebView view in the iPhone SDK.&lt;br /&gt;&lt;br /&gt;In this section, I will show you how you can convert an iPhone Web application into a native iPhone application.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: auto;"&gt;&lt;br /&gt;&lt;/div&gt;First, deploy your Web application by clicking the Share item in Dashcode (see Figure 21). Click the Deploy button so that all the files of the application will be saved to a Web publishing directory. Take note of the Web publishing directory shown in Dashcode. It is saved in &lt;b&gt;/Users/&lt;/b&gt;&lt;username&gt;&lt;b&gt;/Sites/CurrencyConvertor/&lt;/b&gt;. You will make use of the files contained within this folder shortly.&lt;br /&gt;&lt;/username&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKTK6uzSsvI/AAAAAAAAHOE/wTmYB3geBwI/s1600/iphone-dash-21.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Figure 21: Deploying a Web application in Dashcode&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Launch Xcode and create a new View-based Application project. Name the project as CurrencyConvertor.&lt;/li&gt;&lt;li&gt;In Finder, navigate to the &lt;b&gt;/Users/&lt;/b&gt;&lt;username&gt;&lt;b&gt;/Sites/CurrencyConvertor/&lt;/b&gt; folder and select the files shown in Figure 22.&lt;/username&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKTMWZh7zmI/AAAAAAAAHOM/7xwBKv49Mw8/s1600/iphone-22.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;username&gt;&lt;br /&gt;&lt;/username&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Figure 22: All the project files created by Dashcode&lt;/div&gt;&lt;br /&gt;Drag-and-drop all the selected files onto the Resources folder in Xcode. Xcode will prompt you with a dialog (see Figure 23). Check the Copy items into destination group's folder (if needed) checkbox and click Add.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_92YmW8QqZrI/TKTOE0l2y0I/AAAAAAAAHOQ/RH0l5UPS580/s1600/iphone-23.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 23: Adding all the Dashcode files into the Resource folder in Xcode&lt;/div&gt;&lt;br /&gt;Perform a global Find-and-Replace (by pressing &lt;b&gt;Shift-Command-F&lt;/b&gt;). Search and replace the following strings with an empty string (see Figure 24):&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt; Parts/&lt;br /&gt;Images/&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_92YmW8QqZrI/TKTPXmdm1wI/AAAAAAAAHOc/XOEcM9swrsg/s1600/iphone-24.png" /&gt;&lt;/a&gt;&lt;/div&gt;Figure 24: Replacing all instances of "&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;Parts/&lt;/span&gt;" and "&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;Images/&lt;/span&gt;" with an empty string&lt;br /&gt;&lt;br /&gt;This will update the various HTML and JavaScript files that reference other files using the Parts/ and Images/ folder. Files stored in the Resources folder of your Xcode application have no directory structure when they are deployed; hence all the files are in a flat directory.&lt;br /&gt;&lt;br /&gt;Select the files shown in Figure 25 and drag-and-drop them onto the Copy Bundle Resources (16) folder. This will ensure that all the HTML, JavaScript, CSS, and images files will be deployed together with your application.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKTQrk1_4tI/AAAAAAAAHOk/xJiI1Un__mA/s1600/iphone-25.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 25: Copying all the Web files into the targets folder so that they are deployed together with your application&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;In the CurrencyConvertorViewController.h file, add the following statements to define an outlet:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #0b5394;"&gt;&amp;nbsp; #import &lt;/span&gt;&lt;/span&gt;&lt;uikit uikit.h=""&gt;&lt;span style="font-size: x-small;"&gt;&lt;br style="color: #0b5394;" /&gt;&lt;br style="color: #0b5394;" /&gt;&lt;span style="color: #0b5394;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; @interface CurrencyConvertorViewController : UIViewController {&lt;/span&gt;&lt;br style="color: #0b5394;" /&gt;&lt;span style="color: #0b5394;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; IBOutlet UIWebView *webView;&lt;/span&gt;&lt;br style="color: #0b5394;" /&gt;&lt;span style="color: #0b5394;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="color: #0b5394;" /&gt;&lt;br style="color: #0b5394;" /&gt;&lt;span style="color: #0b5394;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; @property (nonatomic, retain) UIWebView *webView;&lt;/span&gt;&lt;br style="color: #0b5394;" /&gt;&lt;br style="color: #0b5394;" /&gt;&lt;span style="color: #0b5394;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; @end&lt;/span&gt;&lt;/span&gt;   &lt;br /&gt;&lt;/uikit&gt;&lt;/div&gt;&lt;div&gt;&lt;uikit uikit.h=""&gt;&lt;br /&gt;Double-click on the CurrencyConvertorViewController.xib file to open it in Interface Builder.&lt;br /&gt;Add a WebView view to the View window and control-click and drag the File's Owner item to the WebView view (see Figure 26). Select webView.&lt;br /&gt;&lt;br /&gt;&lt;/uikit&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_92YmW8QqZrI/TKTRdxbVaoI/AAAAAAAAHOo/-BPVezZ90mU/s1600/iphone-26.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 26: Connecting an outlet to a view&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;uikit uikit.h=""&gt;&lt;br /&gt;&lt;b&gt;In the CurrencyConvertorViewController.m file, add the following statements:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;i style="color: #0b5394;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #import "CurrencyConvertorViewController.h"&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @implementation CurrencyConvertorViewController&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @synthesize webView;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; - (void)viewDidLoad {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; NSString *path = [[NSBundle mainBundle] pathForResource:@"index" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ofType:@"html"];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath: path &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; isDirectory:NO] ]];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [super viewDidLoad];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/i&gt;&lt;/span&gt;   &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/uikit&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;username&gt;&lt;username&gt;&lt;uikit uikit.h=""&gt;That's it! Press Command-r to test the application on the iPhone Simulator. The Web application is now hosted within the WebView view (see Figure 27). What you have just done is convert a Web application into a native application!&lt;br /&gt;&lt;/uikit&gt;&lt;/username&gt;&lt;/username&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://thedashcode.blogspot.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKTSbTvytLI/AAAAAAAAHOw/uvY8ztEJhlw/s1600/iphone-27.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Figure 27: Running the Web application as a native iPhone application&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-321066939999680215?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/321066939999680215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/build-web-apps-with-dashcode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/321066939999680215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/321066939999680215'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/build-web-apps-with-dashcode.html' title='Build Web Apps with Dashcode !'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_92YmW8QqZrI/TKS9QBmD55I/AAAAAAAAHMg/W--L1k25EXw/s72-c/iphone-dash-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-6302282330916816733</id><published>2010-09-28T11:43:00.000-07:00</published><updated>2010-10-01T12:46:49.068-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Developer Tips'/><title type='text'>Developer Tips</title><content type='html'>&lt;div class="floating-menu"&gt;&lt;div align="center"&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "pub-7796957396925846";/* 728x15, created 4/25/10 */google_ad_slot = "4040628465";google_ad_width = 728;google_ad_height = 15;//--&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id="feedCSS1" style="margin: 5px 15px 5px 0px; &amp;lt;br /&amp;gt; float: left;"&gt;&lt;script src="http://feeds.feedburner.com/feedburner/DDPN?format=sigpro" type="text/javascript" &gt;&lt;/script&gt;&lt;noscript&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-6302282330916816733?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/6302282330916816733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/developer-tips.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6302282330916816733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6302282330916816733'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/09/developer-tips.html' title='Developer Tips'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-6338474044044962489</id><published>2010-08-08T03:39:00.000-07:00</published><updated>2010-10-01T12:46:49.083-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Developer News'/><title type='text'>Developer News</title><content type='html'>&lt;div class="floating-menu"&gt;&lt;div align="center"&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "pub-7796957396925846";/* 728x15, created 4/25/10 */google_ad_slot = "4040628465";google_ad_width = 728;google_ad_height = 15;//--&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id="feedCSS1" style="margin: 5px 15px 5px 0px; &amp;lt;br /&amp;gt; float: left;"&gt;&lt;script src="http://feeds.feedburner.com/apple/iPhone-Developer-News?format=sigpro" type="text/javascript"&gt;&lt;/script&gt;&lt;noscript&gt;Subscribe to RSS headline updates from: &lt;a href="http://feeds.feedburner.com/apple/iPhone-Developer-News"&gt;&lt;/a&gt;&lt;br /&gt;Powered by FeedBurner&lt;br /&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-6338474044044962489?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/6338474044044962489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/08/developer-news.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6338474044044962489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6338474044044962489'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/08/developer-news.html' title='Developer News'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-6944069676879948383</id><published>2010-08-08T03:38:00.001-07:00</published><updated>2010-10-01T12:46:49.117-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Developer Widgets'/><title type='text'>Developer Widgets</title><content type='html'>&lt;div class="floating-menu"&gt;&lt;div align="center"&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "pub-7796957396925846";/* 728x15, created 4/25/10 */google_ad_slot = "4040628465";google_ad_width = 728;google_ad_height = 15;//--&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id="feedCSS1" style="margin: 5px 15px 5px 0px;"&gt;&lt;script src="http://feeds.feedburner.com/Downloads-DashboardWidgets-Developer?format=sigpro" type="text/javascript" &gt;&lt;/script&gt;&lt;noscript&gt;&lt;p&gt;Subscribe to RSS headline updates from: &lt;a href="http://feeds.feedburner.com/Downloads-DashboardWidgets-Developer"&gt;&lt;/a&gt;&lt;br /&gt;Powered by FeedBurner&lt;/p&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-6944069676879948383?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/6944069676879948383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/08/developer-widgets.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6944069676879948383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6944069676879948383'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/08/developer-widgets.html' title='Developer Widgets'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-7921143645461291976</id><published>2010-08-08T03:38:00.000-07:00</published><updated>2010-10-01T12:46:49.098-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development Tools'/><title type='text'>Development Tools</title><content type='html'>&lt;div class="floating-menu"&gt;&lt;div align="center"&gt;&lt;script type="text/javascript"&gt;&lt;!--google_ad_client = "pub-7796957396925846";/* 728x15, created 4/25/10 */google_ad_slot = "4040628465";google_ad_width = 728;google_ad_height = 15;//--&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id="feedCSS1" style="margin: 5px 15px 5px 0px;"&gt;&lt;script src="http://feeds.feedburner.com/apple/fjwk?format=sigpro" type="text/javascript" &gt;&lt;/script&gt;&lt;noscript&gt;&lt;p&gt;Subscribe to RSS headline updates from: &lt;a href="http://feeds.feedburner.com/apple/fjwk"&gt;&lt;/a&gt;&lt;br /&gt;Powered by FeedBurner&lt;/p&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-7921143645461291976?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/7921143645461291976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/08/development-tools.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7921143645461291976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7921143645461291976'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2010/08/development-tools.html' title='Development Tools'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-1949439031574433560</id><published>2009-01-01T05:55:00.001-08:00</published><updated>2009-01-01T05:55:52.509-08:00</updated><title type='text'>Introducing Dashcode:</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_92YmW8QqZrI/SUvssPHlqQI/AAAAAAAAEns/JpwXTs5mPz4/s1600-h/dashcodie_hero20071018.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 230px;" src="http://3.bp.blogspot.com/_92YmW8QqZrI/SUvssPHlqQI/AAAAAAAAEns/JpwXTs5mPz4/s400/dashcodie_hero20071018.png" alt="" id="BLOGGER_PHOTO_ID_5281575232738797826" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;New in Mac OS X Leopard, Dashcode lets you quickly and easily build elegant and compelling Dashboard widgets.&lt;br /&gt;Created to meet the need of widget developers, Dashcode combines powerful visual layout tools with a code editor, debugger, and comprehensive package management into a world-class integrated development environment.&lt;br /&gt;It lets you easily and quickly create powerful and useful widgets for yourself, your organization, or even for distribution to the world.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;From the start, Dashboard widgets were designed to be easy to develop. They use the familiar and widely used Web technologies of HTML, JavaScript, and CSS.&lt;br /&gt;Because of the use of standard Web technologies, it's possible to develop a widget using only a text editor, such as TextEdit. However, very few developers are well-versed in creating both great graphical artwork and smoothly functioning code.&lt;br /&gt;As well, it became apparent that the process of packing up a widget and tracking down bugs takes too much time when using just a text editor.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Dashcode was created to address all of these issues.&lt;br /&gt;It takes care of packaging so that you don't have to create a widget's bundle by hand.&lt;br /&gt;It provides a test runtime with a built-in debugger that's a click away so that you don't have to deploy your widget into Dashboard to test it.&lt;br /&gt;And, it provides rich library of graphic elements for you to use to give your widget a compelling design. These features let you focus on making cool, unique, and polished widgets.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;This article, part of the &lt;a href="http://www.blogger.com/index.html"&gt;Leopard Technology Series for Developers&lt;/a&gt;, introduces you to Dashcode and touches on some of its major features.&lt;br /&gt;You'll soon be on your way to creating your own widgets with Dashcode.&lt;/span&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;A Good Starting Point&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:100%;"&gt;One of the first ways that Dashcode helps you to work faster is that it provides several common starter templates to build some of the most popular types of widgets.&lt;br /&gt;The templates range from a basic "Hello, World!" widget to a fairly complex system monitoring widget. All of these templates give you a front and back canvas layout, an icon, and the necessary HTML, CSS, and JavaScript files.&lt;br /&gt;By taking care of these common items that all widgets share, you'll be able to get to the real task of working on what makes your widget unique that much more quickly.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;For example, when you first create a project, you'll be greeted with the following:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_startingpoints.png" alt="Dashcode Templates" style="margin-top: 10px; margin-bottom: 20px;" height="414" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;When you pick one of these templates, everything you need to get started is created  and you can immediately run the widget and get feedback on what you need to do next.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;For example, here are a few widgets created with the provided templates:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_samples.png" alt="Dashcode  Samples" style="margin-top: 10px; margin-bottom: 20px;" height="245" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Behind the scenes, when Dashcode creates a new project, it's managing all of the needed files for you. Instead of making you deal with the files in the Finder, Dashcode presents a clean interface to work with them.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;For example, here's a view of a new Photocast widget in Dashcode:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_interface.png" alt="Dashcode Interface" style="margin-top: 10px; margin-bottom: 20px;" height="328" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;This view is the primary Dashcode workspace and gives you access to all of the tools you'll need in order to create, debug, and ship your widgets.&lt;br /&gt;The left side of the Dashcode window holds the Parts Outline.&lt;br /&gt;This gives you quick and easy access to all the various components that make up your widget.&lt;br /&gt;You'll notice that the parts outline gives you structured access to both the front and back of your widget.&lt;br /&gt;As well, it gives you access to the attributes, default image, and icon for your widget.&lt;br /&gt;The following figure shows the attributes editor for the widget.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_attributes.png" alt="Dashcode Attributes" style="margin-top: 5px; margin-bottom: 20px;" height="351" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;The parts outline isn't the only way to navigate through your widget.&lt;br /&gt;You can also use the Search box. When you enter a search term, the parts outline is replaced with a Spotlight-style results listing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_search.png" alt="Dashcode Search" style="margin-top: 5px; margin-bottom: 20px;" height="319" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;The Parts Outline, as well as the Spotlight style search functionality, gives you quick access to any part of your widget that you need to work on.&lt;br /&gt;Now that you can see how to navigate your widget, let's look at actually working with your widget.&lt;/span&gt;&lt;h3  style="font-weight: normal;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Workflow&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-size:100%;"&gt;To help you build a widget, Dashcode provides a helpful workflow for each of the templates it provides. These workflows are tuned for each template and will walk you step-by-step through the process of taking a template and creating a finished widget from it.&lt;br /&gt;You can access this list by clicking the Show Workflow Button.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_workflow.png" alt="Dashcode Workflow" style="margin-top: 10px; margin-bottom: 25px;" height="408" width="450" /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Working with the Layout Canvas&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;br /&gt;You can manipulate the position of any element in a widget by simply moving it about in the layout. Alignment guides and an absolute position indicator help you adjust your widget's user interface to perfection.&lt;br /&gt;You can also adjust the total size of your widget by using the resize-handle at the lower-right corner of the widget.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_resize.png" alt="Dashcode Resize" style="margin-top: 10px; margin-bottom: 20px;" height="296" width="398" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;You can also work with the attributes of any element by selecting the element and bringing up the Inspector (Option-Command-I).&lt;br /&gt;For example, to change the attributes of the title text in the Photocast starter widget, you could select the text, bring up the Inspector and then change the Character attributes, as shown in the following figure.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_inspector.png" alt="Dashcode Inspector" style="margin-top: 10px; margin-bottom: 20px;" height="269" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;As you adjust the properties for an object, Dashcode makes all of the necessary changes in the widget's CSS file.&lt;br /&gt;For example, changing the color and adding a drop shadow to the text above results in the following CSS rules being set:&lt;/span&gt;&lt;pre class="sourcecodebox"  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;#caption {&lt;br /&gt;position: absolute;&lt;br /&gt;text-align: center;&lt;br /&gt;opacity: 0.75;&lt;br /&gt;overflow: hidden;&lt;br /&gt;background-color: rgb(111, 111, 111);&lt;br /&gt;font-weight: bold;&lt;br /&gt;font-family: Helvetica Neue;&lt;br /&gt;font-size: 18px;&lt;br /&gt;height: 26px;&lt;br /&gt;color: rgb(255, 255, 0);&lt;br /&gt;left: 0px;&lt;br /&gt;top: -1px;&lt;br /&gt;right: 0px;&lt;br /&gt;width: auto;&lt;br /&gt;text-shadow: rgb(0, 0, 0) 2px 2px 4px;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size:100%;"&gt;There's a very direct connection between the actions you take in Dashcode and the resulting changes in the underlying files. Dashcode lets you work in both worlds easily.&lt;/span&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Editing Code&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:100%;"&gt;Dashcode does everything possible to make it easy to work with your widgets graphically. When it's time to add custom behavior, however, you'll need to work with the actual source files.&lt;br /&gt;To edit these files, Dashcode provides a fully-functional code editor for CSS, HTML, and JavaScript files.&lt;br /&gt;For example, to further illustrate the connection between actions you take in the Dashcode user interface and the underlying files, here's a view of the CSS tweaks shown above:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_editor.png" alt="Dashcode Editor" style="margin-top: 10px; margin-bottom: 20px;" height="307" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;The Dashcode editor is a serious coder's editor.&lt;br /&gt;It features automatic indentation, syntax highlighting, and on-demand code completion.&lt;br /&gt;For example, if you were writing a CSS file by hand and wanted to get all of the possible completions starting with font, a quick click of the Option-Escape keys brings up a list, as shown in the following figure:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_codecomplete.png" alt="Dashcode Codecomplete" style="margin-top: 10px; margin-bottom: 30px;" height="385" width="401" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;You can also quickly navigate your files by CSS selector or JavaScript function name, as shown in the following figure:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_methodlist.png" alt="Dashcode Methodlist" style="margin-top: 10px; margin-bottom: 25px;" height="376" width="420" /&gt;&lt;/span&gt;&lt;h3  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;The Library&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-size:100%;"&gt;Dashcode comes with a comprehensive set of UI widgets that you can use to create your widget's interface.&lt;br /&gt;You can open up the Library using either the Library toolbar button or the &lt;strong&gt;Window &amp;gt; Show Library&lt;/strong&gt; menu. Not only does the Library give access to UI items, you can also browse your iLife photos, music, and movies to add them to your widget.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_library.png" alt="Dashcode Library" style="margin-top: 10px; margin-bottom: 25px;" height="376" width="450" /&gt;&lt;/span&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Running Your Widget&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:100%;"&gt;Once you've created your widget, testing it is easy.&lt;br /&gt;Just press Command-R and it will run in an embedded Dashboard runtime.&lt;br /&gt;You'll even see it "splash" onto your screen.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_run.png" alt="Dashcode Run" style="margin-top: 10px; margin-bottom: 20px;" height="362" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Once started, your widget is fully functional and runs just like it would in the real Dashboard. Dashcode's embedded runtime, however, gives you the ability to see runtime events and inspect your widget's object model.&lt;br /&gt;It also features the Code Evaluator which allows you to execute arbitrary JavaScript code against your running widget.&lt;br /&gt;This allows you to get a better sense of how your widget is working and can help you debug problems.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;As an example of using the Code Evaluator, if you want to work with the "Loading..." text at the bottom of the Photocast example widget at runtime, you can type the following into the Code Evaluator window:&lt;/span&gt;&lt;pre class="sourcecodebox"  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;document.getElementById("loading").innerText =&lt;br /&gt;"Now loading the next photograph..."&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size:100%;"&gt;Here's an image showing what this looks like:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_evaluator.png" alt="Dashcode Evaluator" style="margin-top: 10px; margin-bottom: 20px;" height="394" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;With the Code Evaluator, you can manipulate almost every aspect of your widget's runtime object model. For example, you could query the size of an RSS feed and display that information from within the Code Evaluator.&lt;br /&gt;This allows you to try out snippets of JavaScript that you can then integrate into your widget once you're happy with it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Debugging Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Dashcode wouldn't be a true world-class development environment without one more important feature—a fully functional debugger.&lt;br /&gt;You can set breakpoints in your JavaScript code and walk through your code step by step and inspect the values of your widget's variables.&lt;br /&gt;For example, you could set a breakpoint in the showBack method, which gets called when the user flips a widget over to access its preferences.&lt;br /&gt;Once set, the debugger will stop the execution of the widget within the showBack method and let you step through your code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_debugger.png" alt="Dashcode Debugger" style="margin-top: 10px; margin-bottom: 25px;" height="435" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;In addition to setting breakpoints, you can also have Dashcode log every function and method call that happens as your widget runs, as shown in the following figure:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;img src="http://developer.apple.com/leopard/overview/images/dashcode_tracing.png" alt="Dashcode Tracing" style="margin-top: 10px; margin-bottom: 20px;" height="369" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;From tracing through your widget's execution to setting breakpoints and stepping through your widget's code, Dashcode gives you the right tools to make sure that your widget works the way you expect it to.&lt;/span&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Get Started with Leopard&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:100%;"&gt;The next generation of the world's most advanced operating system is now available.&lt;br /&gt;Tap into the innovative technologies of Mac OS X Leopard and&lt;br /&gt;design your products with new and compelling features.&lt;br /&gt;With an ADC Premier or Select Membership, you have a  range of developer resources from Apple engineers and experts, including ADC on iTunes, Coding Headstarts, the ADC Compatibility Labs and more.&lt;br /&gt;&lt;a href="http://www.blogger.com/products/index.html"&gt;Learn how&lt;/a&gt; ADC Memberships provide you Apple expertise. From code to market.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-1949439031574433560?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/1949439031574433560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/introducing-dashcode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/1949439031574433560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/1949439031574433560'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/introducing-dashcode.html' title='Introducing Dashcode:'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_92YmW8QqZrI/SUvssPHlqQI/AAAAAAAAEns/JpwXTs5mPz4/s72-c/dashcodie_hero20071018.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-5217263107775464505</id><published>2009-01-01T05:54:00.000-08:00</published><updated>2010-10-01T13:11:34.432-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dashboard'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><title type='text'>Dashboard 10.4(Tiger) and 10.5(Leopard) Tips:</title><content type='html'>&lt;div  style="text-align: left;font-family:arial;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Change the Dashboard shelf's background image:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center; font-family: arial;"&gt;&lt;/div&gt;&lt;p  style="font-weight: bold; text-align: center;font-family:arial;" class="style6"&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center; font-family: arial;"&gt;&lt;/div&gt;&lt;p  style="text-align: center;font-family:arial;" class="style6"&gt;&lt;span style="font-size:100%;"&gt;&lt;img src="http://the.dashboard.googlepages.com/shelf_bkgnd.jpg" height="65" width="300" /&gt;&lt;/span&gt; &lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;In 10.4, when you press the '+' symbol in the bottom left corner while Dashboard is active,&lt;br /&gt;the Dashboard shelf slides up into view containing all your widgets.&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;The background image used for the shelf can be found here:&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;" class="style11"  &gt;&lt;span style="color: rgb(204, 0, 0);"&gt;...System/Library/CoreServices/Dock.app/Contents/Resources/perf.png&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;You can replace this image with any PNG image you like and it'll be tiled, or you can use a single, full width image.               &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;The shelf is 118 pixels high and as wide as your monitor (1024 pixels in my case), &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;so you can use those dimensions to construct your own shelf background.&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;The bottom area (where the widget names appear) will need to be lighter in color for best results, &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;as the text is both light and shadowed. &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;The height of the text area is 14 pixels. &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;Note also that you do not need to make your PNG file the full width of your monitor --&lt;br /&gt;the image will repeat horizontally if it's not full-width. &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;I used a tiny &lt;a href="http://www.macosxhints.com/images/perf.png" target="_blank"&gt;2KB PNG&lt;/a&gt; to create the above full shelf background.&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p  style="text-align: left;font-family:arial;" class="style10"&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"  &gt;Speed up Dashboard by clearing out its cache:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;             &lt;span style=";font-family:arial;font-size:100%;"  &gt;Over the course of the past few months, Dashboard had become painfully slow for me,&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;sometimes taking 10 to 20 seconds to load.&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;I took a look at:&lt;br /&gt;&lt;/span&gt;             &lt;p  style="color: rgb(204, 0, 0); text-align: left; font-style: italic;font-family:arial;" class="style16"&gt;&lt;span style="font-size:100%;"&gt;~/Library/Caches/ DashboardClient&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt; ...and found that the Dashboard cache was 20MB !!!.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;This seemed excessive (plus, I had a fairly recent backup), so I took a gamble and deleted all the files in the DashboardClient folder. Dashboard now loads almost instantaneously for me.&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p  style="font-weight: bold; text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"  &gt;Quickly free memory used by Dashboard widgets:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;If you only use Dashboard on rare occasions, and don't want all those widgets to stay running forever, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;try the following AppleScript:&lt;/span&gt;             &lt;p  style="color: rgb(204, 0, 0); text-align: left; font-style: italic;font-family:arial;" class="style13"&gt;&lt;span class="style11"  style="font-size:100%;"&gt;tell application "Dock"&lt;br /&gt;&lt;br /&gt;quit&lt;br /&gt;&lt;br /&gt;launch&lt;br /&gt;&lt;br /&gt;end tell&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;This will relaunch the Dock and, since all the Dashboard widgets are subprocesses of the dock, they will be closed. Widgets will stay closed until Dashboard is invoked again. &lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;This is a handy way to quickly free up the RAM used by open Dashboard widgets.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;Run it, and the RAM is released. Press F12 again after that, and you'll see that your open Widgets are all still open (you'll just have to wait through that slight delay as Dashboard 'activates' them again).&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-weight: bold; text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p  style="font-weight: bold; text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"  &gt;Detach widgets from the Dashboard:&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;If you'd like one of your Dashboard widgets to be available all the time, instead of only when you have activated Dashboard via F12, then activate the Dashboard dvelopment mode. &lt;/span&gt;&lt;/p&gt;&lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;Open the Terminal and type defaults write:&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-weight: bold; text-align: left; font-style: italic;font-family:arial;" class="style16"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt; &lt;span style="font-weight: normal;font-size:100%;" &gt;com.apple.dashboard devmode YES&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;...and press Return. Then logout and log back in again.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Now debugging mode is activated.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;To get a widget off of the Dashboard and onto your desktop, just do the following:&lt;/span&gt;             &lt;p  style="color: rgb(204, 0, 0); text-align: left; font-style: italic;font-family:arial;" class="style16"&gt;&lt;span style="font-size:100%;"&gt;1 - Activate Dashboard by pressing F12 (or whatever key you've assigned to Dashboard).&lt;br /&gt;2 - Begin dragging the widget.&lt;br /&gt;3 - Press F12 again, before letting up on the mouse button.&lt;br /&gt;4 - Drop the widget wherever you want it.&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;You can do the same thing in reverse to drag the widget back onto the Dashboard. Also of interest: while a widget is frontmost, you can press Command-R to reload it. (This may be necessary if a widget is buggy and gets messed up somehow.) There's even a nifty Core Image-based twirl effect to accompany the reload. &lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;However, I find it extremely useful -- there are certain widgets that you'd just rather see and use all the time, instead of only in Dashboard mode. Note that the widgets float above all windows, so this trick is most useful if you have some spare desktop space. &lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;To disable this mode, repeat the above command, but replace &lt;/span&gt;&lt;span class="style11"  style="font-size:100%;"&gt;YES&lt;/span&gt;&lt;span style="font-size:100%;"&gt; with &lt;/span&gt;&lt;span class="style11"  style="font-size:100%;"&gt;NO&lt;/span&gt;&lt;span style="font-size:100%;"&gt;, and then logout/login again. Note that you can also restart the Dock to make the changes take effect (the Dock controls the Dashboard).&lt;/span&gt;&lt;/p&gt;&lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p  style="font-weight: bold; text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"  &gt;Widget Limbo !&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;When you have dragged a widget out of the Dashboard layer you can make it go into Widget Limbo like this: press and hold the mouse button over the widget; do not move the mouse. Press F12. Release the mouse button.&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;The widget will now belong outside (beneath) Dashboard, but only be visible (in a darkened state) when Dashboard is active. So it's not possible to close it nor move it. (Normally you can hold the Option key to close a widget).&lt;/span&gt;&lt;/p&gt;&lt;p  style="text-align: center;font-family:arial;" class="style16"&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;&lt;img src="http://the.dashboard.googlepages.com/DashOpenIcon.png" height="89" width="80" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-5217263107775464505?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/5217263107775464505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/dashboard-104tiger-and-105leopard-tips.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/5217263107775464505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/5217263107775464505'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/dashboard-104tiger-and-105leopard-tips.html' title='Dashboard 10.4(Tiger) and 10.5(Leopard) Tips:'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-7245437190006774446</id><published>2009-01-01T05:53:00.001-08:00</published><updated>2010-10-01T13:14:00.586-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Developer Tips'/><title type='text'>Generic Ajax Widget</title><content type='html'>&lt;span style="font-size: 100%;"&gt;&lt;span style="font-family: arial;"&gt;As part of this article, I've included a generic Ajax widget that simply grabs a URL and parses out a small section of the &lt;/span&gt;&lt;abbr style="font-family: arial;" title="Document Object Model"&gt;DOM&lt;/abbr&gt;&lt;span style="font-family: arial;"&gt; that I'm interested in.&lt;br /&gt;It’s a good jumping off point to get going with an Ajaxified widget.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;&lt;a href="http://remysharp.com/downloads/ajax_widget.zip"&gt;Download generic Ajax widget&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;&lt;a href="http://remysharp.com/downloads/ajax_widget_project.zip"&gt;Download the source &lt;span class="hilite"&gt;Dashcode&lt;/span&gt; Ajax project&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;a href="http://remysharp.com/downloads/ajax_widget_project.zip"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 180%;"&gt;Getting Dashcode&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;If you've got a recent version of Leopard or Tiger, the system Disks will contain &lt;/span&gt;&lt;span class="hilite" style="font-size: 100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size: 100%;"&gt; in the developer kit (it may be installed already in your &lt;code&gt;/Developer/Applications&lt;/code&gt; directory).&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;Apple did have &lt;a href="http://developer.apple.com/tools/dashcode/"&gt;&lt;span class="hilite"&gt;Dashcode&lt;/span&gt; available for download&lt;/a&gt;, but since it expired in July (&lt;a href="http://remysharp.com/2007/04/13/apple-delays-osx-leopard/"&gt;when Leopard was &lt;i&gt;to&lt;/i&gt; come out&lt;/a&gt;) it’s no longer there. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;You can hunt around the Internet for a old mirror if you don't have the CDs.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;Once installed, it'll say it’s expired: &lt;a href="http://remysharp.com/2007/07/30/lets-get-dashcode-working-again/"&gt;just get &lt;span class="hilite"&gt;Dashcode&lt;/span&gt; working again&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 180%; font-weight: bold;"&gt;Stability&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size: 100%;"&gt;&lt;img alt="Broken Dashcode Render" height="72" src="http://remysharp.com/wp-content/uploads/2007/09/broken-dashcode-render.jpg" style="float: right; padding: 0pt 0pt 3px 3px;" title="Broken Dashcode Render" width="178" /&gt;Dashcode is particularly ropy with Safari 3. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;With Safari 2 it’s much more stable.  Since there is the occasional crash from Dashcode, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;I would recommend constantly saving your project as you're coding. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;I found more than 10% of the time, &lt;/span&gt;&lt;span class="hilite" style="font-size: 100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size: 100%;"&gt; would crash and result in a total loss of my code from the last save point.&lt;/span&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;Also, I've noticed that dumping a lot to the run log, when viewing the log, can cause &lt;/span&gt;&lt;span class="hilite" style="font-size: 100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size: 100%;"&gt; to slow right down to almost hanging. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;Best to avoid dumping large amounts of HTML to the log.&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;However - and this is a big one - the upside of programming with &lt;/span&gt;&lt;span class="hilite" style="font-size: 100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size: 100%;"&gt; is worth the risk of the crash, because it’s takes most work out of the design process.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;Since you're using it’s &lt;abbr title="Graphical User Interface"&gt;GUI&lt;/abbr&gt; to drag and drop your design and how the user will interact with it, rather than having to code the look and feel by hand.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 130%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 180%;"&gt;Designing Widgets&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;The interface and the library component of &lt;/span&gt;&lt;span class="hilite" style="font-size: 100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size: 100%;"&gt; makes it possibly the strongest app for developing widgets.  It’s 2 minutes work to create a glass effect on your widget, or to place the elements on the window and get going.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;I would strongly recommend studying other widgets, and reading through the &lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_ProgTopics/index.html#//apple_ref/doc/uid/TP40002837"&gt;&lt;span class="hilite"&gt;Dashcode&lt;/span&gt; design recommendations&lt;/a&gt; as it’s easy to design a widget that works, but twice the work to design a widget that’s usable and works well.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;You'll find you can place widget-type objects on your widget, like scroll areas or gauges - but to handle them in the code isn't entirely intuitive, which is why the best source of understand how these interface elements work, is by opening up other widgets that already make use of the element.&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%; font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 180%;"&gt;Controls&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size: 100%;"&gt;Dashcode offers the easy integration of bespoke elements such as the scrollarea, gauges and other such sexy components.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;They're pretty easy to drop on to the widget from &lt;/span&gt;&lt;span class="hilite" style="font-size: 100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size: 100%;"&gt;, but until you're coding, they're not immediately obvious how they work.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;The help is limited, so I would recommend to develop by tutorial, in particular, look for the 'refresh()' methods - as this seems to be a fairly standard way to redraw objects.&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;Full documentation for the &lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_ProgTopics/index.html#//apple_ref/doc/uid/TP40002837"&gt;Apple classes API&lt;/a&gt; is available, but it’s pretty clinical.&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 180%;"&gt;Effects&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;Although effects are available within the Apple classes, you'll need to implement them yourself.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;This is fairly limited to dynamic resizing of the widget, which is achieved using:&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="color: #cc0000; font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;code&gt;window.resizeTo(x, y);&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;If you are going to resize the widget dynamically, check out the &lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_ProgTopics/index.html"&gt;Apple resizing examples&lt;/a&gt; too.  &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;I used this technique in my &lt;a href="http://leftlogic.com/lounge/articles/entity-lookup/"&gt;HTML entities&lt;/a&gt; widget to keep the widget small when it’s dropped in to the Dashboard, but to allow it to grow dynamically when the user searched for a particular HTML entity.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;You should be able to find &lt;a href="http://www.google.com/search?q=javascript+easing+effect"&gt;easing effects code and examples&lt;/a&gt; if the built in Apple animation class doesn't suite your needs.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 180%;"&gt;Running system commands&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;This is one of the few areas that’s well documented in the provided &lt;a href="http://developer.apple.com/documentation/AppleApplications/Reference/Dashboard_Ref/index.html#//apple_ref/doc/uid/TP40001339"&gt;API&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;You can run system commands using the following type of command:&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="color: #cc0000; font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;code&gt;widget.system('ps -auxww | grep ' + myCommand, null);&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: 100%;"&gt;What you should keep in mind, is that you can run &lt;b&gt;any&lt;/b&gt; command through the system method.  This includes Perl, Ruby, AppleScript and anything else that suits your needs. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;Using these commands I've recently been able to create a widget that queries &lt;a href="http://remysharp.com/2007/07/03/a-way-to-keep-track-and-in-touch/"&gt;Mail’s SQLite’s database via Perl&lt;/a&gt;. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;It was a case of running the system method and capturing the output (and in my case, eval'ing it from a &lt;abbr title="JavaScript Object Notation"&gt;JSON&lt;/abbr&gt; output).&lt;/span&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 180%;"&gt;Ajax in the widget&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;You widget supports a variation of the Ajax object (or rather xmlhttprequest object).&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;This version isn't bound by the usual security constraints of a browser - most importantly, it can request content from any domain.  &lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;To execute any Ajax requests from your widget, ensure you have the &lt;b&gt;Allow Network Access&lt;/b&gt; attribute turned on - otherwise the Ajax will fail without any given reason.&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;For example, you could use Ajax to pull your film page from &lt;a href="http://imdb.com/"&gt;IMDb&lt;/a&gt; and then parse the XML for the elements of interest.  &lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;However, if you do want to pull some data from a web page and process it using the DOM returned you have to fiddle the request - in particular the &lt;code&gt;responseXML&lt;/code&gt; will be null because the page being returned isn't &lt;code&gt;text/xml&lt;/code&gt; - it’s &lt;code&gt;text/html&lt;/code&gt;.  You can do it using the following (in &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; syntax):&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;code&gt;&lt;span style="color: #cc0000;"&gt;$.ajax({&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;url: 'http://remysharp.com/example_page', // doesn't really exist!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;dataType: 'html', // important&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;success: function (xml) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;// convert the HTML to an XML DOM object&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;var dom = getDOMfromXML(xml);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;alert(dom.getElementsByTagName('h1').length);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;});&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;function getDOMfromXML(xml) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;var d = document.createElement('div');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;xml = xml.substring(xml.indexOf('&amp;lt;body') + xml.substring(xml.indexOf('&amp;lt;body')).indexOf('&amp;gt;')+1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;xml = xml.substring(0, xml.indexOf('&amp;lt;/body&amp;gt;'));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;d.innerHTML = xml;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;return d;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc0000;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;This &lt;code&gt;getDOM&lt;/code&gt; function is pretty horrible - but it works.  I tried using &lt;code&gt;DOMParser&lt;/code&gt; and tried using &lt;a href="http://web-graphics.com/mtarchive/001606.php"&gt;Ajax local data trick&lt;/a&gt; and I tried using an iframe to inject the XLM - but neither would load the XML properly (in fact it would be blank).&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;The iframe would not load properly because it was still loading the entire frame while I was trying to access it.&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;You can see this in use in the &lt;a href="http://remysharp.com/downloads/ajax_widget.zip"&gt;generic Ajax widget&lt;/a&gt; or download the &lt;a href="http://remysharp.com/downloads/ajax_widget_project.zip"&gt;source &lt;span class="hilite"&gt;Dashcode&lt;/span&gt; project&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 180%;"&gt;Widget Attributes&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;The widget attributes are fairly self explanatory, but it’s worth knowing:&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: arial;"&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;Allow Network Access is required for Ajax requests&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;Allow Command Line Access is required for running external programs, i.e. if you have a Perl script executing some arbitrary task&lt;/span&gt;&lt;/li&gt;&lt;span style="font-size: 100%;"&gt; &lt;/span&gt;&lt;/ul&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;If you intend to make your widget available in different languages, then this is the place to enter the different strings.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 face="arial" style="font-weight: bold;"&gt;&lt;span style="font-size: 130%;"&gt;The Inspector&lt;/span&gt;&lt;/h2&gt;&lt;ul style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;Hide items from the default image to present a better widget when it’s installing.  It can to keep the preview of your app looking clean.&lt;/span&gt;&lt;/li&gt;&lt;span style="font-size: 100%;"&gt;  &lt;/span&gt;&lt;/ul&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 180%;"&gt;Debugging&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span class="hilite" style="font-size: 100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size: 100%;"&gt; comes with a log that can be viewed during run time.  &lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 100%;"&gt;You have following debugging tools:&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;Breakpoints&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;Live stack traces&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;Evaluate window - to test commands&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;To write to the log, you need to use &lt;code&gt;alert("My debug message");&lt;/code&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-7245437190006774446?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/7245437190006774446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/generic-ajax-widget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7245437190006774446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7245437190006774446'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/generic-ajax-widget.html' title='Generic Ajax Widget'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-2155422683128725330</id><published>2009-01-01T05:52:00.000-08:00</published><updated>2009-01-01T05:53:04.859-08:00</updated><title type='text'>The iPhone SDK !</title><content type='html'>&lt;span style=";font-family:arial;font-size:100%;"  &gt;The new &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;iPhone SDK in &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;Dashcode allows you to create Web Applications for the iPhone and iPod Touch. &lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;It provides three templates: Custom, Browser and RSS.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dntCV0-zk7c/R9Dn_oZw0DI/AAAAAAAAADc/dIowuyIPQwA/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://1.bp.blogspot.com/_dntCV0-zk7c/R9Dn_oZw0DI/AAAAAAAAADc/dIowuyIPQwA/s400/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5174891052211949618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dntCV0-zk7c/R9DoKoZw0EI/AAAAAAAAADk/kpjrG2lNsEM/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://1.bp.blogspot.com/_dntCV0-zk7c/R9DoKoZw0EI/AAAAAAAAADk/kpjrG2lNsEM/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5174891241190510658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dntCV0-zk7c/R9DoVYZw0FI/AAAAAAAAADs/HzTwwXnmnx4/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://4.bp.blogspot.com/_dntCV0-zk7c/R9DoVYZw0FI/AAAAAAAAADs/HzTwwXnmnx4/s400/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5174891425874104402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It provides you with fields to specify how to handle orientation changes and zooming.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dntCV0-zk7c/R9Doo4Zw0GI/AAAAAAAAAD0/v0QaLEqNAx0/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://2.bp.blogspot.com/_dntCV0-zk7c/R9Doo4Zw0GI/AAAAAAAAAD0/v0QaLEqNAx0/s400/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5174891760881553506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DoxIZw0HI/AAAAAAAAAD8/CWMAoqzg1_s/s1600-h/Picture+5.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DoxIZw0HI/AAAAAAAAAD8/CWMAoqzg1_s/s400/Picture+5.png" alt="" id="BLOGGER_PHOTO_ID_5174891902615474290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There is a Home Screen icon editor.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dntCV0-zk7c/R9Do-4Zw0II/AAAAAAAAAEE/OZvk84w8rpI/s1600-h/Picture+9.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://2.bp.blogspot.com/_dntCV0-zk7c/R9Do-4Zw0II/AAAAAAAAAEE/OZvk84w8rpI/s400/Picture+9.png" alt="" id="BLOGGER_PHOTO_ID_5174892138838675586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is how the Browser template looks when run using the iPhone Simulator.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dntCV0-zk7c/R9Do_YZw0KI/AAAAAAAAAEU/WXKwEurtpxA/s1600-h/Picture+11.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://4.bp.blogspot.com/_dntCV0-zk7c/R9Do_YZw0KI/AAAAAAAAAEU/WXKwEurtpxA/s400/Picture+11.png" alt="" id="BLOGGER_PHOTO_ID_5174892147428610210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dntCV0-zk7c/R9Do_4Zw0LI/AAAAAAAAAEc/osg1pC2lCiQ/s1600-h/Picture+12.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://2.bp.blogspot.com/_dntCV0-zk7c/R9Do_4Zw0LI/AAAAAAAAAEc/osg1pC2lCiQ/s400/Picture+12.png" alt="" id="BLOGGER_PHOTO_ID_5174892156018544818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I copied the Ski Report icon from the Dashboard Widget.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DpAIZw0MI/AAAAAAAAAEk/LtJIMJMkSZ0/s1600-h/Picture+13.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DpAIZw0MI/AAAAAAAAAEk/LtJIMJMkSZ0/s400/Picture+13.png" alt="" id="BLOGGER_PHOTO_ID_5174892160313512130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dntCV0-zk7c/R9DpMoZw0NI/AAAAAAAAAEs/RhXu3E4Fw64/s1600-h/Picture+14.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://1.bp.blogspot.com/_dntCV0-zk7c/R9DpMoZw0NI/AAAAAAAAAEs/RhXu3E4Fw64/s400/Picture+14.png" alt="" id="BLOGGER_PHOTO_ID_5174892375061876946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I then tried to dump the contents of the Translation Dashboard widget into an iPhone Web Application. It nearly worked.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DpNIZw0OI/AAAAAAAAAE0/PFELZ72uAI8/s1600-h/Picture+15.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DpNIZw0OI/AAAAAAAAAE0/PFELZ72uAI8/s400/Picture+15.png" alt="" id="BLOGGER_PHOTO_ID_5174892383651811554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dntCV0-zk7c/R9DpNYZw0PI/AAAAAAAAAE8/Q0TjHJzmWw4/s1600-h/Picture+16.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://4.bp.blogspot.com/_dntCV0-zk7c/R9DpNYZw0PI/AAAAAAAAAE8/Q0TjHJzmWw4/s400/Picture+16.png" alt="" id="BLOGGER_PHOTO_ID_5174892387946778866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The RSS template allows you to enter an RSS field URL and customize which and how many articles should appear.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DyNIZw0RI/AAAAAAAAAFM/UTqMSahAYdg/s1600-h/Picture+1.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DyNIZw0RI/AAAAAAAAAFM/UTqMSahAYdg/s400/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5174902279256461586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I added Slashdot's Home Screen Icon.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dntCV0-zk7c/R9DyNoZw0SI/AAAAAAAAAFU/uA-wDJT3Ky4/s1600-h/Picture+2.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_dntCV0-zk7c/R9DyNoZw0SI/AAAAAAAAAFU/uA-wDJT3Ky4/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5174902287846396194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Running it in the simulator.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DyOIZw0TI/AAAAAAAAAFc/P892BPOeWRg/s1600-h/Picture+4.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DyOIZw0TI/AAAAAAAAAFc/P892BPOeWRg/s400/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5174902296436330802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dntCV0-zk7c/R9DyOoZw0UI/AAAAAAAAAFk/zMynsQLVnoU/s1600-h/Picture+5.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_dntCV0-zk7c/R9DyOoZw0UI/AAAAAAAAAFk/zMynsQLVnoU/s400/Picture+5.png" alt="" id="BLOGGER_PHOTO_ID_5174902305026265410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DyPIZw0VI/AAAAAAAAAFs/NB1FQp6vDzs/s1600-h/Picture+6.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DyPIZw0VI/AAAAAAAAAFs/NB1FQp6vDzs/s400/Picture+6.png" alt="" id="BLOGGER_PHOTO_ID_5174902313616200018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dntCV0-zk7c/R9DylYZw0WI/AAAAAAAAAF0/jrwgC6CLmsI/s1600-h/Picture+7.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_dntCV0-zk7c/R9DylYZw0WI/AAAAAAAAAF0/jrwgC6CLmsI/s400/Picture+7.png" alt="" id="BLOGGER_PHOTO_ID_5174902695868289378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DymIZw0XI/AAAAAAAAAF8/VqpeXrnTvs8/s1600-h/Picture+8.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_dntCV0-zk7c/R9DymIZw0XI/AAAAAAAAAF8/VqpeXrnTvs8/s400/Picture+8.png" alt="" id="BLOGGER_PHOTO_ID_5174902708753191282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dntCV0-zk7c/R9DymYZw0YI/AAAAAAAAAGE/-EC34f5O_XA/s1600-h/Picture+9.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_dntCV0-zk7c/R9DymYZw0YI/AAAAAAAAAGE/-EC34f5O_XA/s400/Picture+9.png" alt="" id="BLOGGER_PHOTO_ID_5174902713048158594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Deploying the Web Application is very easy.&lt;br /&gt;Select "Deploy Web Application" from the File menu, and it outputs a folder that you can put on your server.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dntCV0-zk7c/R9DymoZw0ZI/AAAAAAAAAGM/kE5be2jQSPk/s1600-h/Picture+10.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_dntCV0-zk7c/R9DymoZw0ZI/AAAAAAAAAGM/kE5be2jQSPk/s400/Picture+10.png" alt="" id="BLOGGER_PHOTO_ID_5174902717343125906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dntCV0-zk7c/R9Dym4Zw0aI/AAAAAAAAAGU/HrWcVxUKty8/s1600-h/Picture+11.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_dntCV0-zk7c/R9Dym4Zw0aI/AAAAAAAAAGU/HrWcVxUKty8/s400/Picture+11.png" alt="" id="BLOGGER_PHOTO_ID_5174902721638093218" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:100%;"  &gt;Apple iPhone SDK with Dashcode allows you to make web apps:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;With Apple iPhone SDK anyone can now code a web application for the iPhone.&lt;br /&gt;How you may well ask?&lt;br /&gt;Well Apple’s iPhone SDK includes a new version of Dashcode which makes easy of web-app development for the iPhone.&lt;br /&gt;&lt;br /&gt;You can start off using the default browsing screen template, (and the interface includes preset styles we associate with the iPhone) or simple code your own.&lt;br /&gt;Those new to iPhone development will be pleased to hear that it is possible for them to take the slider plate and add on gauges, indications, form elements, forward/back buttons and much more, all with a little knowledge of code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;One drawback I can possibly see is with the new Dashcode just maybe the web will suddenly be inundated with an abundance of new iPhone web-apps.&lt;br /&gt;More than likely most will not be that good, but then again maybe some amateur developer may develop a really cool web-app, who knows?&lt;br /&gt;So if you are a budding web-app developer, or even if not, go and download the iPhone SDK and have a play at web-app development, you may just be very good at it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phonesreview.co.uk/wp-content/phoneimages/2008/03/iphonewebapps.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 224px;" src="http://www.phonesreview.co.uk/wp-content/phoneimages/2008/03/iphonewebapps.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-2155422683128725330?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/2155422683128725330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/iphone-sdk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/2155422683128725330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/2155422683128725330'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/iphone-sdk.html' title='The iPhone SDK !'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dntCV0-zk7c/R9Dn_oZw0DI/AAAAAAAAADc/dIowuyIPQwA/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-7983715534590862944</id><published>2009-01-01T05:51:00.002-08:00</published><updated>2009-01-01T05:52:22.632-08:00</updated><title type='text'>Refreshing a Widget</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;p&gt;A tough reference to find is keyboard shortcuts &lt;strong&gt;within&lt;/strong&gt; Mac OS X Dashboard.&lt;/p&gt;&lt;/span&gt;I'm not talking about &lt;em&gt;launching&lt;/em&gt; Dashboard - everyone knows you can set "hot keys" or mouse corners to trigger that. I'm referring to keyboard shortcuts &lt;em&gt;once your in Dashboard view&lt;/em&gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;p&gt;To refresh a specific widget, click on the widget once, and hit &lt;strong&gt;Command + R&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;You'll notice a very cool "swirl" effect, which almost looks like a hurricane on a radar screen:&lt;/p&gt;&lt;p&gt;&lt;img src="http://matthom.com/images/643.jpg" alt="Screenshot of OS X Dashboard" title="Refreshing a Dashboard widget will cause this swirl effect." height="298" width="300" /&gt;&lt;/p&gt;&lt;p&gt;Every widget you refresh will perform this "swirl" action, and subsequently refresh the widget content.&lt;/p&gt;&lt;p&gt;If you're wondering what widget this was that I refreshed, it's the basic weather widget from Apple:&lt;/p&gt;&lt;p&gt;&lt;img src="http://matthom.com/images/644.jpg" alt="Screenshot of OS X Dashboard" title="The Dashboard widget in its normal state." height="298" width="300" /&gt;&lt;/p&gt;&lt;p&gt;If you manually click the "+" icon in the lower left corner of Dashboard view, your "widget toolbar" will appear along the bottom.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here you can add or remove widgets from display.&lt;/p&gt;&lt;p&gt;To open this "widget toolbar," you can also hit &lt;strong&gt;Command + "+"&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;That's Command and the "+" key at the same time. Hitting it again will close the "widget toolbar."&lt;/p&gt;&lt;p&gt;This is not so much a keyboard shortcut, but a keyboard &lt;strong&gt;adjustment&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you hold down the "Option" key while in Dashboard view, and hover over a widget, you can manually remove the widget by clicking the "X" in the upper left corner of the widget.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The "X" only appears when you move the mouse over each widget.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This is quicker than opening the "widget toolbar" first, and &lt;em&gt;then&lt;/em&gt; removing.&lt;/p&gt;&lt;p&gt;I'm making a list of additional shortcuts that would be useful:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Much like hitting &lt;strong&gt;Command + R&lt;/strong&gt; refreshes a widget, hitting &lt;strong&gt;Command + I&lt;/strong&gt; should provide &lt;strong&gt;info&lt;/strong&gt; on the widget. (Only applicable for widgets that have a "back side" info panel.)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Some way of removing widgets without having to manually click the "X". (I'm thinking &lt;strong&gt;Command + W&lt;/strong&gt; or something similar.)&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-7983715534590862944?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/7983715534590862944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/refreshing-widget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7983715534590862944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7983715534590862944'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/refreshing-widget.html' title='Refreshing a Widget'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-3420684735650658581</id><published>2009-01-01T05:51:00.001-08:00</published><updated>2009-01-01T05:51:37.369-08:00</updated><title type='text'>Key Combos !</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_92YmW8QqZrI/SUvp2AzQvMI/AAAAAAAAEnk/Ge3oRjSUMpI/s1600-h/0+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 109px;" src="http://2.bp.blogspot.com/_92YmW8QqZrI/SUvp2AzQvMI/AAAAAAAAEnk/Ge3oRjSUMpI/s400/0+1.png" alt="" id="BLOGGER_PHOTO_ID_5281572102159252674" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Startup:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Press X during startup - Force Mac OS X startup&lt;br /&gt;Press Option-Command-Shift-Delete during startup - Bypass primary startup volume and seek a different startup volume (such as a CD or external disk)&lt;br /&gt;Press C during startup - Start up from a CD that has a system folder&lt;br /&gt;Press N during startup - Attempt to start up from a compatible network server (NetBoot)&lt;br /&gt;Press T during startup - Start up in FireWire Target Disk mode&lt;br /&gt;Press Shift during startup - Start up in Safe Boot mode and temporarily disable login items and non-essential kernel extension files (Mac OS X 10.2 and later)&lt;br /&gt;Press Command-V during startup - Start up in Verbose mode.&lt;br /&gt;Press Command-S during startup - Start up in Single-User mode&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Finder window:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Command-W - Close Window&lt;br /&gt;Option-Command-W - Close all Windows&lt;br /&gt;Command-Right Arrow - Expand folder (list view)&lt;br /&gt;Option-Command-Right Arrow - Expand folder and nested subfolders (list view)&lt;br /&gt;Command-Left Arrow - Collapse Folder (list view)&lt;br /&gt;Option-Command-Up Arrow - Open parent folder and close current window&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Menu commands:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Shift-Command-Q (Apple Menu) - Log out&lt;br /&gt;Shift-Option-Command-Q (Apple Menu) - Log out immediately&lt;br /&gt;Shift-Command-Delete (Finder Menu) - Empty Trash&lt;br /&gt;Option-Shift-Command-Delete (Finder Menu) - Empty Trash without dialog&lt;br /&gt;Command-H (Finder Menu) - Hide Finder&lt;br /&gt;Option-Command-H (Finder Menu) - Hide Others&lt;br /&gt;Command-N (File Menu) - New Finder window&lt;br /&gt;Shift-Command-N (File Menu) - New Folder&lt;br /&gt;Command-O (File Menu) - Open&lt;br /&gt;Command-S (File Menu) - Save&lt;br /&gt;Shift-Command-S (File Menu) - Save as&lt;br /&gt;Command-P (File Menu) - Print&lt;br /&gt;Command-W (File Menu) - Close Window&lt;br /&gt;Option-Command-W (File Menu) - Close all Windows&lt;br /&gt;Command-I (File Menu) - Get Info&lt;br /&gt;Option-Command-I (File Menu) - Show Attributes Inspector&lt;br /&gt;Command-D (File Menu) - Duplicate&lt;br /&gt;Command-L (File Menu) - Make Alias&lt;br /&gt;Command-R (File Menu) - Show original&lt;br /&gt;Command-T (File Menu) - Add to Favorites (Mac OS X 10.2.8 or earlier), Add to Sidebar (Mac OS X 10.3 or later—use Shift-Command-T for Add to Favorites)&lt;br /&gt;Command-Delete (File Menu) - Move to Trash&lt;br /&gt;Command-E (File Menu) - Eject&lt;br /&gt;Command-F (File Menu) - Find&lt;br /&gt;Command-Z (Edit Menu) - Undo&lt;br /&gt;Command-X (Edit Menu) - Cut&lt;br /&gt;Command-C (Edit Menu) - Copy&lt;br /&gt;Command-V (Edit Menu) - Paste&lt;br /&gt;Command-A (Edit Menu) - Select All&lt;br /&gt;Command-1 (View Menu) - View as Icons&lt;br /&gt;Command-2 (View Menu) - View as List&lt;br /&gt;Command-3 (View Menu) - View as Columns&lt;br /&gt;Command-B (View Menu) - Hide Toolbar&lt;br /&gt;Command-J (View Menu) - Show View Options&lt;br /&gt;Command - [ (Go Menu) - Back&lt;br /&gt;Command - ] (Go Menu) - Forward&lt;br /&gt;Shift-Command-C (Go Menu) - Computer&lt;br /&gt;Shift-Command-H (Go Menu) - Home&lt;br /&gt;Shift-Command-I (Go Menu) - iDisk&lt;br /&gt;Shift-Command-A (Go Menu) - Applications&lt;br /&gt;Shift-Command-F (Go Menu) - Favorites&lt;br /&gt;Shift-Command-G (Go Menu) - Goto Folder&lt;br /&gt;Command-K (Go Menu) - Connect to Server&lt;br /&gt;Command-M (Window Menu) - Minimize Window&lt;br /&gt;Option-Command-M (Window Menu) - Minimize All Windows&lt;br /&gt;Command-? (Help Menu) - Open Mac Help&lt;br /&gt;Command-Space - Open Spotlight (Mac OS X 10.4 or later)&lt;br /&gt;Command-esc (Front Row) - Activates Front Row for certain Apple computers&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Universal Access and VoiceOver:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Option-Command-8 - Turn on Zoom&lt;br /&gt;Option-Command-+ (plus) - Zoom in&lt;br /&gt;Option-Command-- (minus) - Zoom out&lt;br /&gt;Control-Option-Command-8 - Switch to White on Black&lt;br /&gt;Control-F1 - Turn on Full Keyboard Access&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;When Full Keyboard Access is turned on, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;you can use the key combinations listed in the table below from the Finder:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Control-F2 (Full Keyboard Access) - Highlight Menu&lt;br /&gt;Control-F3 (Full Keyboard Access) - Highlight Dock&lt;br /&gt;Control-F4 (Full Keyboard Access) - Highlight Window (active) or next window behind it&lt;br /&gt;Control-F5 (Full Keyboard Access) - Highlight Toolbar&lt;br /&gt;Control-F6 (Full Keyboard Access) - Highlight Utility window (palette)&lt;br /&gt;Command-F5 or fn-Command-F5 - Turn VoiceOver on or off (Mac OS X 10.4 or later)&lt;br /&gt;Control-Option-F8 or fn-Control-Option-F8 - Open VoiceOver Utility (Mac OS X 10.4 or later)&lt;br /&gt;Control-Option-F7 or fn-Control-option-F7 - Display VoiceOver menu (Mac OS X 10.4 or later)&lt;br /&gt;Control-Option-; or fn-Control-option-; - Enable/disable VoiceOver Control-Option lock (Mac OS X 10.4 or later)&lt;br /&gt;&lt;br /&gt;The Universal Access preference pane allows you to turn on Mouse Keys. When Mouse Keys is on, you can use the numeric keypad to move the mouse. If your computer doesn't have a numeric keypad, use the Fn (function) key.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mouse Keys:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;8 - Move Up&lt;br /&gt;2 - Move Down&lt;br /&gt;4 - Move Left&lt;br /&gt;6 - Move Right&lt;br /&gt;1, 3, 7, and 9 - Move Diagonally&lt;br /&gt;5 - Press Mouse Button&lt;br /&gt;0 - Hold Mouse Button&lt;br /&gt;. (period on keypad) - Release Mouse Button (use after pressing 0)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Other Commands:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Option-Command-D - Show/Hide Dock&lt;br /&gt;Command-Tab - Switch application&lt;br /&gt;tab - Highlight next item&lt;br /&gt;Command-Up Arrow - Move up one directory&lt;br /&gt;Command-Down Arrow - Move down one directory&lt;br /&gt;Page Up or Control-Up Arrow - Move up one page&lt;br /&gt;Page Down or Control-Down Arrow - Move down one page&lt;br /&gt;Option-Drag - Copy to new location&lt;br /&gt;Option-Command-Drag - Make alias in new location&lt;br /&gt;Command-Drag - Move to new location without copying&lt;br /&gt;Shift-Command-C - Show Colors palette in application&lt;br /&gt;Command-T - Show Font palette in application&lt;br /&gt;Command-Shift-3 - Take a picture of the screen&lt;br /&gt;Command-Shift-4 - Take a picture of the selection&lt;br /&gt;Command-Shift-4, then press Control while selecting - Take a picture of the screen, place in Clipboard&lt;br /&gt;Command-Shift-4, then Spacebar - Take a picture of the selected window&lt;br /&gt;Option-Command-esc - Force Quit&lt;br /&gt;Control-Eject - Restart, Sleep, Shutdown dialog box&lt;br /&gt;Control-Command-Eject - Quit all applications and restart&lt;br /&gt;Option-Command-Eject or Option-Command-Power - Sleep&lt;br /&gt;Command-click window toolbar button (upper right corner) - Cycle through available views for the window's toolbar (dependant on the nature of the Finder or application window)&lt;br /&gt;Command-` - Cycle through windows in application or Finder (if more than one window is open)&lt;br /&gt;Function-Delete - (portables only--PowerBook, iBook, MacBook, MacBook Pro) Forward Delete - (delete the character to the right of your cursor)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-3420684735650658581?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/3420684735650658581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/key-combos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/3420684735650658581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/3420684735650658581'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/key-combos.html' title='Key Combos !'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_92YmW8QqZrI/SUvp2AzQvMI/AAAAAAAAEnk/Ge3oRjSUMpI/s72-c/0+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-7687249245741886674</id><published>2009-01-01T05:49:00.000-08:00</published><updated>2009-01-01T05:51:06.157-08:00</updated><title type='text'>Sample Codes for Dashcode !</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_92YmW8QqZrI/SUu8RVOJYCI/AAAAAAAAEnE/G45R7170zIo/s1600-h/512%2BDashcode.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 320px;" src="http://4.bp.blogspot.com/_92YmW8QqZrI/SUu8RVOJYCI/AAAAAAAAEnE/G45R7170zIo/s320/512%2BDashcode.png" alt="" id="BLOGGER_PHOTO_ID_5281521993962315810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;Dashboard is a display and management system for Mac OS X desktop utilities, called widgets. Developers can create widgets, such as a clock or a calculator,&lt;br /&gt;to provide functionality that doesn't require the complexity of a large application.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://developer.apple.com/samplecode/images/LibraryIcons/icon_samplecode_s.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 81px; height: 75px;" src="http://developer.apple.com/samplecode/images/LibraryIcons/icon_samplecode_s.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Dashcode Sample Codes:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:arial;"&gt;Hello World&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;Introductory Dashboard widget example&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a style="font-family: arial;" href="http://developer.apple.com/samplecode/HelloWorld/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a style="font-family: arial;" href="http://developer.apple.com/samplecode/HelloWorld/HelloWorld.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a style="font-family: arial;" href="http://developer.apple.com/samplecode/HelloWorld/HelloWorld.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div  style="font-weight: bold; color: rgb(0, 0, 0); text-align: center;font-family:arial;" class="results_description"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div  style="font-weight: bold; color: rgb(0, 0, 0); text-align: center;font-family:arial;" class="results_description"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:130%;" &gt;&lt;span style="font-family:arial;"&gt;Fortune&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;Deprecated - Demonstrates use of a widget plug-in&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Fortune/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Fortune/Fortune.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Fortune/Fortune.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div  style="font-weight: bold; color: rgb(0, 0, 0); text-align: center;font-family:arial;" class="results_description"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:arial;"&gt;Scroller&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Dashboard widget with a DHTML scrollbar implementation&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Scroller/index.html"&gt;(HTML) &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Scroller/Scroller.dmg"&gt;(DMG) &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Scroller/Scroller.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:arial;"&gt;Birthdays&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;Dashboard widget with a plug-in that queries AddressBook.framework for contacts with upcoming birthdays&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Birthdays/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Birthdays/Birthdays.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Birthdays/Birthdays.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div  style="font-weight: bold; color: rgb(0, 0, 0); text-align: center;font-family:arial;" class="results_description"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:arial;"&gt;Fader&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-size:78%;"&gt;Demonstrates fading of elements inside a Dashboard widget&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Fader/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Fader/Fader.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Fader/Fader.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div  style="font-weight: bold; color: rgb(0, 0, 0); text-align: center;font-family:arial;" class="results_description"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:arial;"&gt;Goodbye World&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-size:78%;"&gt;Demonstrates display and use of widget preferences to save a widget's state&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/GoodbyeWorld/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/GoodbyeWorld/GoodbyeWorld.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/GoodbyeWorld/GoodbyeWorld.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div  style="font-weight: bold; color: rgb(0, 0, 0); text-align: center;font-family:arial;" class="results_description"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:arial;"&gt;Hello Welt&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;Demonstrates localization techniques for Dashboard widgets&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/HelloWelt/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/HelloWelt/HelloWelt.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/HelloWelt/HelloWelt.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div  style="font-weight: bold; color: rgb(0, 0, 0); text-align: center;font-family:arial;" class="results_description"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:arial;"&gt;Voices&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;Demonstrates use of the widget.system command from Dashboard&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Voices/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Voices/Voices.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Voices/Voices.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div  style="font-weight: bold; color: rgb(0, 0, 0); text-align: center;font-family:arial;" class="results_description"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:arial;"&gt;Resizer&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;A widget that demonstrates how to use the Apple Animation and Animator classes.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Resizer/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Resizer/Resizer.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Resizer/Resizer.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div  style="font-weight: bold; color: rgb(0, 0, 0); text-align: center;font-family:arial;" class="results_description"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:arial;"&gt;Syncer&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;A widget that demonstrates how to use handle a Dashboard Sync event.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Syncer/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Syncer/Syncer.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style=";font-family:arial;font-size:78%;"  &gt;&lt;a href="http://developer.apple.com/samplecode/Syncer/Syncer.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div  style="font-weight: bold; color: rgb(0, 0, 0); text-align: center;font-family:arial;" class="results_description"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-7687249245741886674?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/7687249245741886674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/sample-codes-for-dashcode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7687249245741886674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7687249245741886674'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/sample-codes-for-dashcode.html' title='Sample Codes for Dashcode !'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_92YmW8QqZrI/SUu8RVOJYCI/AAAAAAAAEnE/G45R7170zIo/s72-c/512%2BDashcode.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-8690206851500177446</id><published>2009-01-01T05:46:00.000-08:00</published><updated>2010-10-03T08:06:48.969-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dashboard Guidelines'/><title type='text'>Dashboard Guidelines:</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_92YmW8QqZrI/SUu7CR0d5JI/AAAAAAAAEm8/75NJllKIuS4/s1600-h/dashboard1.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5281520635839636626" src="http://4.bp.blogspot.com/_92YmW8QqZrI/SUu7CR0d5JI/AAAAAAAAEm8/75NJllKIuS4/s320/dashboard1.png" style="cursor: pointer; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dashboard Programming Topics:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;(&lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_ProgTopics/index.html"&gt;HTML&lt;/a&gt;) (&lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_ProgTopics/Dashboard_ProgTopics.pdf"&gt;PDF&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;Explains Dashboard and WebKit technologies used in widgets.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dashboard Reference:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;(&lt;a href="http://developer.apple.com/documentation/AppleApplications/Reference/Dashboard_Ref/index.html"&gt;HTML&lt;/a&gt;) (&lt;a href="http://developer.apple.com/documentation/AppleApplications/Reference/Dashboard_Ref/Dashboard_Ref.pdf"&gt;PDF&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;Explains JavaScript, Info.plist, and other objects used within Dashboard.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dashboard Tutorial:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;(&lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_Tutorial/index.html"&gt;HTML&lt;/a&gt;) (&lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_Tutorial/Dashboard_Tutorial.pdf"&gt;PDF&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;Explains how to develop a Dashboard widget.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Debugging Dashboard Widgets:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;(&lt;a href="http://developer.apple.com/technotes/tn2005/tn2139.html"&gt;HTML&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;TN2139: Dashboard widget troubleshooting techniques, from start to finish.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Developing Dashboard Widgets:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;(&lt;a href="http://developer.apple.com/macosx/dashboard.html"&gt;HTML&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;Learn how to create powerful mini-applications quickly and easily.&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;(10.4 Tiger Developer Overview)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Intel-Based Macs, Dashboard and Safari:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;(&lt;a href="http://developer.apple.com/qa/qa2005/qa1451.html"&gt;HTML&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;Details regarding widget and web development for Intel-based Macintosh computers.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-8690206851500177446?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/8690206851500177446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/dashboard-guidelines.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/8690206851500177446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/8690206851500177446'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2009/01/dashboard-guidelines.html' title='Dashboard Guidelines:'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_92YmW8QqZrI/SUu7CR0d5JI/AAAAAAAAEm8/75NJllKIuS4/s72-c/dashboard1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-5763952561501546999</id><published>2008-10-01T19:27:00.000-07:00</published><updated>2010-10-01T12:46:49.134-07:00</updated><title type='text'>WDGTPROJ - IT'S ALL ABOUT DASHCODE</title><content type='html'>&lt;a href="http://www.widgipedia.com/widgets/TheDashboard/WDGTPROJ---ITS-ALL-ABOUT-DASHCODE_2622.widget"&gt;Download&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://widget-project.blogspot.com/"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_92YmW8QqZrI/SOQxrs0-sYI/AAAAAAAAC4g/yVhhn2wZbHU/s400/Picture+5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5252377692258349442" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-5763952561501546999?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/5763952561501546999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/10/wdgtproj-it-all-about-dashcode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/5763952561501546999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/5763952561501546999'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/10/wdgtproj-it-all-about-dashcode.html' title='WDGTPROJ - IT&amp;#39;S ALL ABOUT DASHCODE'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_92YmW8QqZrI/SOQxrs0-sYI/AAAAAAAAC4g/yVhhn2wZbHU/s72-c/Picture+5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-5868674942721221918</id><published>2008-09-04T18:05:00.000-07:00</published><updated>2010-10-01T13:12:42.178-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dashboard Guidelines'/><title type='text'>Dashboard Guidelines</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_92YmW8QqZrI/SUu7CR0d5JI/AAAAAAAAEm8/75NJllKIuS4/s1600-h/dashboard1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 320px;" src="http://4.bp.blogspot.com/_92YmW8QqZrI/SUu7CR0d5JI/AAAAAAAAEm8/75NJllKIuS4/s320/dashboard1.png" alt="" id="BLOGGER_PHOTO_ID_5281520635839636626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dashboard Programming Topics:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(&lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_ProgTopics/index.html"&gt;HTML&lt;/a&gt;) (&lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_ProgTopics/Dashboard_ProgTopics.pdf"&gt;PDF&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;Explains Dashboard and WebKit technologies used in widgets.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dashboard Reference:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(&lt;a href="http://developer.apple.com/documentation/AppleApplications/Reference/Dashboard_Ref/index.html"&gt;HTML&lt;/a&gt;) (&lt;a href="http://developer.apple.com/documentation/AppleApplications/Reference/Dashboard_Ref/Dashboard_Ref.pdf"&gt;PDF&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;Explains JavaScript, Info.plist, and other objects used within Dashboard.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dashboard Tutorial:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(&lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_Tutorial/index.html"&gt;HTML&lt;/a&gt;) (&lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_Tutorial/Dashboard_Tutorial.pdf"&gt;PDF&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;Explains how to develop a Dashboard widget.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Debugging Dashboard Widgets:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(&lt;a href="http://developer.apple.com/technotes/tn2005/tn2139.html"&gt;HTML&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;TN2139: Dashboard widget troubleshooting techniques, from start to finish.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Developing Dashboard Widgets:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(&lt;a href="http://developer.apple.com/macosx/dashboard.html"&gt;HTML&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;Learn how to create powerful mini-applications quickly and easily.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(10.4 Tiger Developer Overview)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Intel-Based Macs, Dashboard and Safari:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(&lt;a href="http://developer.apple.com/qa/qa2005/qa1451.html"&gt;HTML&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;Details regarding widget and web development for Intel-based Macintosh computers.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-5868674942721221918?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/5868674942721221918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/09/dashboard-guidelines.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/5868674942721221918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/5868674942721221918'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/09/dashboard-guidelines.html' title='Dashboard Guidelines'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_92YmW8QqZrI/SUu7CR0d5JI/AAAAAAAAEm8/75NJllKIuS4/s72-c/dashboard1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-8161331351640498098</id><published>2008-06-04T15:05:00.000-07:00</published><updated>2010-10-01T12:46:49.165-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dashcode'/><title type='text'>Sample Codes for Dashcode !</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_92YmW8QqZrI/SUu8RVOJYCI/AAAAAAAAEnE/G45R7170zIo/s1600-h/512%2BDashcode.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5281521993962315810" src="http://4.bp.blogspot.com/_92YmW8QqZrI/SUu8RVOJYCI/AAAAAAAAEnE/G45R7170zIo/s320/512%2BDashcode.png" style="cursor: pointer; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;Dashboard is a display and management system for Mac OS X desktop utilities, called widgets. Developers can create widgets, such as a clock or a calculator,&lt;br /&gt;to provide functionality that doesn't require the complexity of a large application.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 180%;"&gt;&lt;span style="font-weight: bold;"&gt;Dashcode Sample Codes:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-weight: bold;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Hello World&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Introductory Dashboard widget example&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/HelloWorld/index.html" style="font-family: arial;"&gt;(HTML) &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/HelloWorld/HelloWorld.dmg" style="font-family: arial;"&gt;(DMG) &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/HelloWorld/HelloWorld.zip" style="font-family: arial;"&gt;(ZIP) &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="results_description" style="color: black; font-family: arial; font-weight: bold; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="results_description" style="color: black; font-family: arial; font-weight: bold; text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-weight: bold;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Fortune&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Deprecated - Demonstrates use of a widget plug-in&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Fortune/index.html"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;(HTML)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Fortune/Fortune.dmg"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;(DMG)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Fortune/Fortune.zip"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;(ZIP)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="results_description" style="color: black; font-family: arial; font-weight: bold; text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-weight: bold;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Scroller&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Dashboard widget with a DHTML scrollbar implementation&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Scroller/index.html"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;(HTML) &lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Scroller/Scroller.dmg"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;(DMG) &lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Scroller/Scroller.zip"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;(ZIP)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-weight: bold;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Birthdays&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Dashboard widget with a plug-in that queries AddressBook.framework for contacts with upcoming birthdays&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Birthdays/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Birthdays/Birthdays.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Birthdays/Birthdays.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="results_description" style="color: black; font-family: arial; font-weight: bold; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-weight: bold;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Fader&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Demonstrates fading of elements inside a Dashboard widget&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Fader/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Fader/Fader.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Fader/Fader.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="results_description" style="color: black; font-family: arial; font-weight: bold; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-weight: bold;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Goodbye World&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Demonstrates display and use of widget preferences to save a widget's state&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/GoodbyeWorld/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/GoodbyeWorld/GoodbyeWorld.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/GoodbyeWorld/GoodbyeWorld.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="results_description" style="color: black; font-family: arial; font-weight: bold; text-align: center;"&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-size: 78%;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black; font-weight: bold;"&gt;&lt;span style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Hello Welt&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Demonstrates localization techniques for Dashboard widgets&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/HelloWelt/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/HelloWelt/HelloWelt.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/HelloWelt/HelloWelt.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="results_description" style="color: black; font-family: arial; font-weight: bold; text-align: center;"&gt;&lt;span style="font-size: 78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Voices&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Demonstrates use of the widget.system command from Dashboard&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Voices/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Voices/Voices.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Voices/Voices.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="results_description" style="color: black; font-family: arial; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Resizer&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;A widget that demonstrates how to use the Apple Animation and Animator classes.&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Resizer/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Resizer/Resizer.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Resizer/Resizer.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="results_description" style="color: black; font-family: arial; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Syncer&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;A widget that demonstrates how to use handle a Dashboard Sync event.&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Syncer/index.html"&gt;(HTML)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Syncer/Syncer.dmg"&gt;(DMG)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: arial;"&gt;&lt;a href="http://developer.apple.com/samplecode/Syncer/Syncer.zip"&gt;(ZIP)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="results_description" style="color: black; font-family: arial; font-weight: bold; text-align: center;"&gt;&lt;span style="font-size: 78%;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-8161331351640498098?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/8161331351640498098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/06/sample-codes-for-dashcode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/8161331351640498098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/8161331351640498098'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/06/sample-codes-for-dashcode.html' title='Sample Codes for Dashcode !'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_92YmW8QqZrI/SUu8RVOJYCI/AAAAAAAAEnE/G45R7170zIo/s72-c/512%2BDashcode.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-6925377007583073590</id><published>2008-05-15T12:52:00.000-07:00</published><updated>2010-10-01T13:12:20.564-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Key Combos'/><title type='text'>Key Combos !</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_92YmW8QqZrI/SUvp2AzQvMI/AAAAAAAAEnk/Ge3oRjSUMpI/s1600-h/0+1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 109px;" src="http://2.bp.blogspot.com/_92YmW8QqZrI/SUvp2AzQvMI/AAAAAAAAEnk/Ge3oRjSUMpI/s400/0+1.png" alt="" id="BLOGGER_PHOTO_ID_5281572102159252674" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Startup:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Press X during startup - Force Mac OS X startup&lt;br /&gt;Press Option-Command-Shift-Delete during startup - Bypass primary startup volume and seek a different startup volume (such as a CD or external disk)&lt;br /&gt;Press C during startup - Start up from a CD that has a system folder&lt;br /&gt;Press N during startup - Attempt to start up from a compatible network server (NetBoot)&lt;br /&gt;Press T during startup - Start up in FireWire Target Disk mode&lt;br /&gt;Press Shift during startup - Start up in Safe Boot mode and temporarily disable login items and non-essential kernel extension files (Mac OS X 10.2 and later)&lt;br /&gt;Press Command-V during startup - Start up in Verbose mode.&lt;br /&gt;Press Command-S during startup - Start up in Single-User mode&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Finder window:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Command-W - Close Window&lt;br /&gt;Option-Command-W - Close all Windows&lt;br /&gt;Command-Right Arrow - Expand folder (list view)&lt;br /&gt;Option-Command-Right Arrow - Expand folder and nested subfolders (list view)&lt;br /&gt;Command-Left Arrow - Collapse Folder (list view)&lt;br /&gt;Option-Command-Up Arrow - Open parent folder and close current window&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Menu commands:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Shift-Command-Q (Apple Menu) - Log out&lt;br /&gt;Shift-Option-Command-Q (Apple Menu) - Log out immediately&lt;br /&gt;Shift-Command-Delete (Finder Menu) - Empty Trash&lt;br /&gt;Option-Shift-Command-Delete (Finder Menu) - Empty Trash without dialog&lt;br /&gt;Command-H (Finder Menu) - Hide Finder&lt;br /&gt;Option-Command-H (Finder Menu) - Hide Others&lt;br /&gt;Command-N (File Menu) - New Finder window&lt;br /&gt;Shift-Command-N (File Menu) - New Folder&lt;br /&gt;Command-O (File Menu) - Open&lt;br /&gt;Command-S (File Menu) - Save&lt;br /&gt;Shift-Command-S (File Menu) - Save as&lt;br /&gt;Command-P (File Menu) - Print&lt;br /&gt;Command-W (File Menu) - Close Window&lt;br /&gt;Option-Command-W (File Menu) - Close all Windows&lt;br /&gt;Command-I (File Menu) - Get Info&lt;br /&gt;Option-Command-I (File Menu) - Show Attributes Inspector&lt;br /&gt;Command-D (File Menu) - Duplicate&lt;br /&gt;Command-L (File Menu) - Make Alias&lt;br /&gt;Command-R (File Menu) - Show original&lt;br /&gt;Command-T (File Menu) - Add to Favorites (Mac OS X 10.2.8 or earlier), Add to Sidebar (Mac OS X 10.3 or later—use Shift-Command-T for Add to Favorites)&lt;br /&gt;Command-Delete (File Menu) - Move to Trash&lt;br /&gt;Command-E (File Menu) - Eject&lt;br /&gt;Command-F (File Menu) - Find&lt;br /&gt;Command-Z (Edit Menu) - Undo&lt;br /&gt;Command-X (Edit Menu) - Cut&lt;br /&gt;Command-C (Edit Menu) - Copy&lt;br /&gt;Command-V (Edit Menu) - Paste&lt;br /&gt;Command-A (Edit Menu) - Select All&lt;br /&gt;Command-1 (View Menu) - View as Icons&lt;br /&gt;Command-2 (View Menu) - View as List&lt;br /&gt;Command-3 (View Menu) - View as Columns&lt;br /&gt;Command-B (View Menu) - Hide Toolbar&lt;br /&gt;Command-J (View Menu) - Show View Options&lt;br /&gt;Command - [ (Go Menu) - Back&lt;br /&gt;Command - ] (Go Menu) - Forward&lt;br /&gt;Shift-Command-C (Go Menu) - Computer&lt;br /&gt;Shift-Command-H (Go Menu) - Home&lt;br /&gt;Shift-Command-I (Go Menu) - iDisk&lt;br /&gt;Shift-Command-A (Go Menu) - Applications&lt;br /&gt;Shift-Command-F (Go Menu) - Favorites&lt;br /&gt;Shift-Command-G (Go Menu) - Goto Folder&lt;br /&gt;Command-K (Go Menu) - Connect to Server&lt;br /&gt;Command-M (Window Menu) - Minimize Window&lt;br /&gt;Option-Command-M (Window Menu) - Minimize All Windows&lt;br /&gt;Command-? (Help Menu) - Open Mac Help&lt;br /&gt;Command-Space - Open Spotlight (Mac OS X 10.4 or later)&lt;br /&gt;Command-esc (Front Row) - Activates Front Row for certain Apple computers&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Universal Access and VoiceOver:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Option-Command-8 - Turn on Zoom&lt;br /&gt;Option-Command-+ (plus) - Zoom in&lt;br /&gt;Option-Command-- (minus) - Zoom out&lt;br /&gt;Control-Option-Command-8 - Switch to White on Black&lt;br /&gt;Control-F1 - Turn on Full Keyboard Access&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;When Full Keyboard Access is turned on, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;you can use the key combinations listed in the table below from the Finder:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Control-F2 (Full Keyboard Access) - Highlight Menu&lt;br /&gt;Control-F3 (Full Keyboard Access) - Highlight Dock&lt;br /&gt;Control-F4 (Full Keyboard Access) - Highlight Window (active) or next window behind it&lt;br /&gt;Control-F5 (Full Keyboard Access) - Highlight Toolbar&lt;br /&gt;Control-F6 (Full Keyboard Access) - Highlight Utility window (palette)&lt;br /&gt;Command-F5 or fn-Command-F5 - Turn VoiceOver on or off (Mac OS X 10.4 or later)&lt;br /&gt;Control-Option-F8 or fn-Control-Option-F8 - Open VoiceOver Utility (Mac OS X 10.4 or later)&lt;br /&gt;Control-Option-F7 or fn-Control-option-F7 - Display VoiceOver menu (Mac OS X 10.4 or later)&lt;br /&gt;Control-Option-; or fn-Control-option-; - Enable/disable VoiceOver Control-Option lock (Mac OS X 10.4 or later)&lt;br /&gt;&lt;br /&gt;The Universal Access preference pane allows you to turn on Mouse Keys. When Mouse Keys is on, you can use the numeric keypad to move the mouse. If your computer doesn't have a numeric keypad, use the Fn (function) key.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mouse Keys:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;8 - Move Up&lt;br /&gt;2 - Move Down&lt;br /&gt;4 - Move Left&lt;br /&gt;6 - Move Right&lt;br /&gt;1, 3, 7, and 9 - Move Diagonally&lt;br /&gt;5 - Press Mouse Button&lt;br /&gt;0 - Hold Mouse Button&lt;br /&gt;. (period on keypad) - Release Mouse Button (use after pressing 0)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Other Commands:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Option-Command-D - Show/Hide Dock&lt;br /&gt;Command-Tab - Switch application&lt;br /&gt;tab - Highlight next item&lt;br /&gt;Command-Up Arrow - Move up one directory&lt;br /&gt;Command-Down Arrow - Move down one directory&lt;br /&gt;Page Up or Control-Up Arrow - Move up one page&lt;br /&gt;Page Down or Control-Down Arrow - Move down one page&lt;br /&gt;Option-Drag - Copy to new location&lt;br /&gt;Option-Command-Drag - Make alias in new location&lt;br /&gt;Command-Drag - Move to new location without copying&lt;br /&gt;Shift-Command-C - Show Colors palette in application&lt;br /&gt;Command-T - Show Font palette in application&lt;br /&gt;Command-Shift-3 - Take a picture of the screen&lt;br /&gt;Command-Shift-4 - Take a picture of the selection&lt;br /&gt;Command-Shift-4, then press Control while selecting - Take a picture of the screen, place in Clipboard&lt;br /&gt;Command-Shift-4, then Spacebar - Take a picture of the selected window&lt;br /&gt;Option-Command-esc - Force Quit&lt;br /&gt;Control-Eject - Restart, Sleep, Shutdown dialog box&lt;br /&gt;Control-Command-Eject - Quit all applications and restart&lt;br /&gt;Option-Command-Eject or Option-Command-Power - Sleep&lt;br /&gt;Command-click window toolbar button (upper right corner) - Cycle through available views for the window's toolbar (dependant on the nature of the Finder or application window)&lt;br /&gt;Command-` - Cycle through windows in application or Finder (if more than one window is open)&lt;br /&gt;Function-Delete - (portables only--PowerBook, iBook, MacBook, MacBook Pro) Forward Delete - (delete the character to the right of your cursor)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-6925377007583073590?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/6925377007583073590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/05/key-combos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6925377007583073590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6925377007583073590'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/05/key-combos.html' title='Key Combos !'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_92YmW8QqZrI/SUvp2AzQvMI/AAAAAAAAEnk/Ge3oRjSUMpI/s72-c/0+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-5404102493081105856</id><published>2008-04-04T03:27:00.000-07:00</published><updated>2010-10-01T12:46:49.206-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Videos'/><title type='text'>Dashcode Video Tutorials</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;object width="640" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zGbC6T5Ero0&amp;hl=en_US&amp;feature=player_embedded&amp;version=3"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/zGbC6T5Ero0&amp;hl=en_US&amp;feature=player_embedded&amp;version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/W7Uw1ocO8bY&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/W7Uw1ocO8bY&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/GrHTuvLifZs&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/GrHTuvLifZs&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/DmV-zmIDZI8&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/DmV-zmIDZI8&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AO4avlFwqBI&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/AO4avlFwqBI&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/oLV5iwXK6zM&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/oLV5iwXK6zM&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4ZwU35O56ng&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/4ZwU35O56ng&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/EdCQceknukU&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/EdCQceknukU&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Tyz4_-MBeCY&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/Tyz4_-MBeCY&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/uollCnVzHvU&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/uollCnVzHvU&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/SE5pubWSTM4&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/SE5pubWSTM4&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/OYerGfdruQQ&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/OYerGfdruQQ&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/0wgUPMiBggs&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/0wgUPMiBggs&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/SE5pubWSTM4&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/SE5pubWSTM4&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Ts6m2IMlHSw&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/Ts6m2IMlHSw&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;object height="380" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8S63JpeeiW0&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/8S63JpeeiW0&amp;amp;border=1&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="380" width="640"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;a href="http://dashboard.development.googlepages.com/TheDashcodeTutorial1.1.html" style="font-family: arial;"&gt;Watch Dashcode Video Tutorials&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-5404102493081105856?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/5404102493081105856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/04/dashcode-video-tutorials.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/5404102493081105856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/5404102493081105856'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/04/dashcode-video-tutorials.html' title='Dashcode Video Tutorials'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-6966128854679681866</id><published>2008-04-02T09:43:00.000-07:00</published><updated>2010-10-01T12:46:49.224-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wallpaper'/><title type='text'>Dashboard Wallpaper</title><content type='html'>&lt;div align="center" style="font-family: arial; font-weight: bold;"&gt;&lt;/div&gt;&lt;div align="center" class="style5" style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-size: 180%;"&gt;1280&lt;/span&gt;x&lt;span style="font-size: 180%;"&gt;960&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;                  &lt;br /&gt;&lt;div align="center"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_92YmW8QqZrI/TKT2rKXf8CI/AAAAAAAAHPU/mUgTALqL0Bc/s1600/TheDashboardWallpaperWhite.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://4.bp.blogspot.com/_92YmW8QqZrI/TKT2rKXf8CI/AAAAAAAAHPU/mUgTALqL0Bc/s640/TheDashboardWallpaperWhite.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;img height="120" src="http://the.dashboard.googlepages.com/DashB.png" width="162" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;Black&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;/div&gt;&lt;span style="font-size: 85%;"&gt;&lt;a href="http://the.dashboard.googlepages.com/TheDashboard_Black1280x960.png.zip" target="_self"&gt;Download&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center" class="style5" style="font-family: arial; font-weight: bold;"&gt;&lt;div align="center"&gt;&lt;span style="font-size: 100%;"&gt;&lt;img height="121" src="http://the.dashboard.googlepages.com/DashD.png" width="161" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;Dashboard&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;/div&gt;&lt;span style="font-size: 85%;"&gt;&lt;a href="http://the.dashboard.googlepages.com/TheDashboardWallpaperdash.png.zip" target="_self"&gt;Download&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;                &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center" class="style5" style="font-family: arial; font-weight: bold;"&gt;&lt;div align="center"&gt;&lt;span style="font-size: 100%;"&gt;&lt;img height="122" src="http://the.dashboard.googlepages.com/DashW.png" width="162" /&gt;&lt;/span&gt; &lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;White&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;a href="http://the.dashboard.googlepages.com/TheDashboardWallpaperWhite.png.zip" target="_self"&gt;Download&lt;/a&gt;&lt;/span&gt;                                  &lt;/div&gt;&lt;span style="font-family: arial; font-size: 100%; font-weight: bold;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 100%; font-weight: bold;"&gt;&lt;/span&gt;                &lt;br /&gt;&lt;div align="center" face="arial" style="font-weight: bold;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;img height="120" src="http://the.dashboard.googlepages.com/DashGar.png" width="161" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="center" style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;Gradient&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;a href="http://the.dashboard.googlepages.com/TheDashboardWallpaperGrard.png.zip" target="_self"&gt; &lt;span style="font-size: 85%;"&gt;Download&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;                &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-6966128854679681866?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/6966128854679681866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/04/dashboard-wallpaper.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6966128854679681866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6966128854679681866'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/04/dashboard-wallpaper.html' title='Dashboard Wallpaper'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_92YmW8QqZrI/TKT2rKXf8CI/AAAAAAAAHPU/mUgTALqL0Bc/s72-c/TheDashboardWallpaperWhite.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-7374602314199806584</id><published>2008-04-02T09:32:00.000-07:00</published><updated>2010-10-01T12:46:49.239-07:00</updated><title type='text'>...some Dashboard 10.4 Tiger Tips and Tricks !</title><content type='html'>&lt;div  style="text-align: left;font-family:arial;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Change the Dashboard shelf's background image:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center; font-family: arial;"&gt;            &lt;/div&gt;&lt;p  style="font-weight: bold; text-align: center;font-family:arial;" class="style6"&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center; font-family: arial;"&gt;            &lt;/div&gt;&lt;p  style="text-align: center;font-family:arial;" class="style6"&gt;&lt;span style="font-size:100%;"&gt;&lt;img src="http://the.dashboard.googlepages.com/shelf_bkgnd.jpg" height="65" width="300" /&gt;&lt;/span&gt; &lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;In 10.4, when you press the '+' symbol in the bottom left corner while Dashboard is active,&lt;br /&gt;the Dashboard shelf slides up into view containing all your widgets.&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;The background image used for the shelf can be found here:&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;" class="style11"  &gt;&lt;span style="color: rgb(204, 0, 0);"&gt;...System/Library/CoreServices/Dock.app/Contents/Resources/perf.png&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;You can replace this image with any PNG image you like and it'll be tiled, or you can use a single, full width image.               &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;The shelf is 118 pixels high and as wide as your monitor (1024 pixels in my case), &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;so you can use those dimensions to construct your own shelf background.&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;The bottom area (where the widget names appear) will need to be lighter in color for best results, &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;as the text is both light and shadowed. &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;The height of the text area is 14 pixels. &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;Note also that you do not need to make your PNG file the full width of your monitor --&lt;br /&gt;the image will repeat horizontally if it's not full-width. &lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;I used a tiny &lt;a href="http://www.macosxhints.com/images/perf.png" target="_blank"&gt;2KB PNG&lt;/a&gt; to create the above full shelf background.&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p  style="text-align: left;font-family:arial;" class="style10"&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"  &gt;Speed up Dashboard by clearing out its cache:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;             &lt;span style=";font-family:arial;font-size:100%;"  &gt;Over the course of the past few months, Dashboard had become painfully slow for me,&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;sometimes taking 10 to 20 seconds to load.&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;I took a look at:&lt;br /&gt;&lt;/span&gt;             &lt;p  style="color: rgb(204, 0, 0); text-align: left; font-style: italic;font-family:arial;" class="style16"&gt;&lt;span style="font-size:100%;"&gt;~/Library/Caches/ DashboardClient&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt; ...and found that the Dashboard cache was 20MB !!!.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;This seemed excessive (plus, I had a fairly recent backup), so I took a gamble and deleted all the files in the DashboardClient folder. Dashboard now loads almost instantaneously for me.&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;         &lt;p  style="font-weight: bold; text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"  &gt;Quickly free memory used by Dashboard widgets:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;If you only use Dashboard on rare occasions, and don't want all those widgets to stay running forever, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;try the following AppleScript:&lt;/span&gt;             &lt;p  style="color: rgb(204, 0, 0); text-align: left; font-style: italic;font-family:arial;" class="style13"&gt;&lt;span class="style11"  style="font-size:100%;"&gt;tell application "Dock"&lt;br /&gt;&lt;br /&gt;    quit&lt;br /&gt;&lt;br /&gt;    launch&lt;br /&gt;&lt;br /&gt;    end tell&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;This will relaunch the Dock and, since all the Dashboard widgets are subprocesses of the dock, they will be closed. Widgets will stay closed until Dashboard is invoked again. &lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;This is a handy way to quickly free up the RAM used by open Dashboard widgets.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;Run it, and the RAM is released. Press F12 again after that, and you'll see that your open Widgets are all still open (you'll just have to wait through that slight delay as Dashboard 'activates' them again).&lt;/span&gt;&lt;/p&gt;             &lt;p  style="font-weight: bold; text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;         &lt;p  style="font-weight: bold; text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"  &gt;Detach widgets from the Dashboard:&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;If you'd like one of your Dashboard widgets to be available all the time, instead of only when you have activated Dashboard via F12, then activate the Dashboard dvelopment mode. &lt;/span&gt;&lt;/p&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;Open the Terminal and type defaults write:&lt;/span&gt;&lt;/p&gt;             &lt;p  style="font-weight: bold; text-align: left; font-style: italic;font-family:arial;" class="style16"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt; &lt;span style="font-weight: normal;font-size:100%;" &gt;com.apple.dashboard devmode YES&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;             &lt;span style="font-size:100%;"&gt;...and press Return. Then logout and log back in again.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Now debugging mode is activated.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;To get a widget off of the Dashboard and onto your desktop, just do the following:&lt;/span&gt;             &lt;p  style="color: rgb(204, 0, 0); text-align: left; font-style: italic;font-family:arial;" class="style16"&gt;&lt;span style="font-size:100%;"&gt;1 - Activate Dashboard by pressing F12 (or whatever key you've assigned to Dashboard).&lt;br /&gt;    2 - Begin dragging the widget.&lt;br /&gt;    3 - Press F12 again, before letting up on the mouse button.&lt;br /&gt;    4 - Drop the widget wherever you want it.&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;You can do the same thing in reverse to drag the widget back onto the Dashboard. Also of interest: while a widget is frontmost, you can press Command-R to reload it. (This may be necessary if a widget is buggy and gets messed up somehow.) There's even a nifty Core Image-based twirl effect to accompany the reload. &lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;However, I find it extremely useful -- there are certain widgets that you'd just rather see and use all the time, instead of only in Dashboard mode. Note that the widgets float above all windows, so this trick is most useful if you have some spare desktop space. &lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;To disable this mode, repeat the above command, but replace &lt;/span&gt;&lt;span class="style11"  style="font-size:100%;"&gt;YES&lt;/span&gt;&lt;span style="font-size:100%;"&gt; with &lt;/span&gt;&lt;span class="style11"  style="font-size:100%;"&gt;NO&lt;/span&gt;&lt;span style="font-size:100%;"&gt;, and then logout/login again. Note that you can also restart the Dock to make the changes take effect (the Dock controls the Dashboard).&lt;/span&gt;&lt;/p&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;         &lt;p  style="font-weight: bold; text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"  &gt;Widget Limbo !&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;When you have dragged a widget out of the Dashboard layer you can make it go into Widget Limbo like this: press and hold the mouse button over the widget; do not move the mouse. Press F12. Release the mouse button.&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;/span&gt;             &lt;p  style="text-align: left;font-family:arial;" class="style13"&gt;&lt;span style="font-size:100%;"&gt;The widget will now belong outside (beneath) Dashboard, but only be visible (in a darkened state) when Dashboard is active. So it's not possible to close it nor move it. (Normally you can hold the Option key to close a widget).&lt;/span&gt;&lt;/p&gt;&lt;p  style="text-align: center;font-family:arial;" class="style16"&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;&lt;img src="http://the.dashboard.googlepages.com/DashOpenIcon.png" height="89" width="80" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-7374602314199806584?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/7374602314199806584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/04/some-dashboard-104-tiger-tips-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7374602314199806584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/7374602314199806584'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/04/some-dashboard-104-tiger-tips-and.html' title='...some Dashboard 10.4 Tiger Tips and Tricks !'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-6075252315509611788</id><published>2008-03-28T13:08:00.000-07:00</published><updated>2010-10-03T08:16:04.764-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dashcode'/><title type='text'>Dashcode !</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://dashcode-tips-and-tricks.blogspot.com/"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/_EBEWf_aR-ew/TKic1-HNdZI/AAAAAAAACO4/5mJ1CEdPRQg/s320/Dashcode.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dashcode-tips-and-tricks.blogspot.com/"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_EBEWf_aR-ew/TKicwGFMOaI/AAAAAAAACOw/RdMildjz_Bo/s1600/dashcode_title20070611.png" /&gt;&lt;/a&gt;&lt;span style="font-family: arial; font-size: small;"&gt;Ever wish you could make your very own Dashboard widget? A handy RSS feed of your favorite blog, maybe. Or a miniature photocast of your iPhoto library. Something uniquely useful, uniquely you. Say hello to Dashcode. Now you can get a widget up and running in minutes, even if you’ve never written a line of code in your life.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_EBEWf_aR-ew/TKid5k1f-XI/AAAAAAAACPE/r7JopTheO7c/s1600/essentials_widgets20090513.png" /&gt;&lt;/div&gt;&lt;span style="font-family: arial; font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt; Choose your widget.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Your Dashcode project starts life as a template designed specifically for the kind of information you want to display. Choose from a handful of Dashcode widget templates — including a countdown timer, map, RSS feed, photocast, podcast, and gauge — or create a widget from scratch with a blank template. Every template includes detailed workflow steps to guide you through the process of creating your widget.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Stop, drop, and roll.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;After you choose the perfect template, you can drag and drop components onto the Dashcode canvas. Drag in an RSS link and your widget populates with a full feed. Drag in a photocast URL and your widget transforms into a self-contained slideshow. Drag in a podcast link and you can start playing the feed right from your widget.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Widgets by design.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Once your widget’s working, you can use the Dashcode library to add design and functionality finesse. The library comes with a collection of buttons, lists, containers, and text fields. Resize the components of your entire widget or alter fonts, colors, gradients, images — practically every visual element — without writing a single line of code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Deploy and conquer.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Dashcode organizes all the files that make up your widget, including images, JavaScript code, style sheets, generated files, and localizations. Add new files and the Dashcode project manager takes care of updates automatically. And when your widget is ready for prime time, Dashcode packages up all your files and the Apple-provided resources required to deploy your widget to Dashboard or submit it to Apple.com.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Dashcode for the power user.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Instant-on debugging. Total integration of project management, design, and code in Dashcode makes your widget ready to test. Just click Run and your widget instantly starts up. Click Pause to inspect the running widget or set breakpoints to debug specific sections of code. The built-in debugger provides all the features you’d expect from a professional developer tool.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Professional source code editor.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Dashcode offers all the text-editing features of a professional integrated development environment (IDE) — including color syntax highlighting, line numbering, and Code Sense code completion — optimized for the JavaScript programming language. The editor also integrates with the debugger, so you can easily set and view breakpoints and track your widget’s execution through the source code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Code snippets.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The Dashcode library includes more than just GUI controls. It also provides a rich collection of JavaScript code snippets for many common programming tasks. Simply drag the snippet from the library and drop it into your JavaScript source file. Each snippet includes instructions for changing the behavior to meet your needs. The snippets complete many common tasks you would otherwise have to hand-code, including:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;RSS parsing.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Download and understand RSS feeds to provide up-to-date information to your widget.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Animate elements.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Fade, move, or resize elements in your widget.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;String and data processing.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Format and localize text.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Preferences.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Manage user preferences for your widget: Perfect for the back panel.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Parts APIs.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Manipulate the include GUI parts using JavaScript.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://dashcode-tips-and-tricks.blogspot.com/"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_EBEWf_aR-ew/TKic0Y-HVgI/AAAAAAAACO0/eQvb6GCdRPo/s320/512+Dashcode+Document.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-6075252315509611788?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/6075252315509611788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/widgets-without-wait.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6075252315509611788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/6075252315509611788'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/widgets-without-wait.html' title='Dashcode !'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_EBEWf_aR-ew/TKic1-HNdZI/AAAAAAAACO4/5mJ1CEdPRQg/s72-c/Dashcode.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-3851648941596357016</id><published>2008-03-28T12:58:00.000-07:00</published><updated>2010-10-01T12:46:49.271-07:00</updated><title type='text'>Refreshing a widget:</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;p&gt;A tough reference to find is keyboard shortcuts &lt;strong&gt;within&lt;/strong&gt; Mac OS X Dashboard.&lt;/p&gt;&lt;/span&gt;I'm not talking about &lt;em&gt;launching&lt;/em&gt; Dashboard - everyone knows you can set "hot keys" or mouse corners to trigger that. I'm referring to keyboard shortcuts &lt;em&gt;once your in Dashboard view&lt;/em&gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;p&gt;To refresh a specific widget, click on the widget once, and hit &lt;strong&gt;Command + R&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;You'll notice a very cool "swirl" effect, which almost looks like a hurricane on a radar screen:&lt;/p&gt;&lt;p&gt;&lt;img src="http://matthom.com/images/643.jpg" alt="Screenshot of OS X Dashboard" title="Refreshing a Dashboard widget will cause this swirl effect." height="298" width="300" /&gt;&lt;/p&gt;&lt;p&gt;Every widget you refresh will perform this "swirl" action, and subsequently refresh the widget content.&lt;/p&gt;&lt;p&gt;If you're wondering what widget this was that I refreshed, it's the basic weather widget from Apple:&lt;/p&gt;&lt;p&gt;&lt;img src="http://matthom.com/images/644.jpg" alt="Screenshot of OS X Dashboard" title="The Dashboard widget in its normal state." height="298" width="300" /&gt;&lt;/p&gt;&lt;p&gt;If you manually click the "+" icon in the lower left corner of Dashboard view, your "widget toolbar" will appear along the bottom.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here you can add or remove widgets from display.&lt;/p&gt;&lt;p&gt;To open this "widget toolbar," you can also hit &lt;strong&gt;Command + "+"&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;That's Command and the "+" key at the same time. Hitting it again will close the "widget toolbar."&lt;/p&gt;&lt;p&gt;This is not so much a keyboard shortcut, but a keyboard &lt;strong&gt;adjustment&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you hold down the "Option" key while in Dashboard view, and hover over a widget, you can manually remove the widget by clicking the "X" in the upper left corner of the widget.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The "X" only appears when you move the mouse over each widget.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This is quicker than opening the "widget toolbar" first, and &lt;em&gt;then&lt;/em&gt; removing.&lt;/p&gt;&lt;p&gt;I'm making a list of additional shortcuts that would be useful:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Much like hitting &lt;strong&gt;Command + R&lt;/strong&gt; refreshes a widget, hitting &lt;strong&gt;Command + I&lt;/strong&gt; should provide &lt;strong&gt;info&lt;/strong&gt; on the widget. (Only applicable for widgets that have a "back side" info panel.)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Some way of removing widgets without having to manually click the "X". (I'm thinking &lt;strong&gt;Command + W&lt;/strong&gt; or something similar.)&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-3851648941596357016?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/3851648941596357016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/refreshing-widget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/3851648941596357016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/3851648941596357016'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/refreshing-widget.html' title='Refreshing a widget:'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-8747311087864281911</id><published>2008-03-28T09:02:00.000-07:00</published><updated>2010-10-01T12:46:49.285-07:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_92YmW8QqZrI/R-0W4v8oi9I/AAAAAAAABxU/kE_8tKwaxOA/s1600-h/512-Dashcode+Document.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_92YmW8QqZrI/R-0W4v8oi9I/AAAAAAAABxU/kE_8tKwaxOA/s400/512-Dashcode+Document.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5182823910372576210" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-8747311087864281911?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/8747311087864281911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/8747311087864281911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/8747311087864281911'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/blog-post.html' title=''/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_92YmW8QqZrI/R-0W4v8oi9I/AAAAAAAABxU/kE_8tKwaxOA/s72-c/512-Dashcode+Document.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-5103953761227537746</id><published>2008-03-24T07:12:00.000-07:00</published><updated>2010-10-01T12:46:49.369-07:00</updated><title type='text'>The iPhone SDK !</title><content type='html'>&lt;span style="font-family: arial;font-size:100%;" &gt;The new &lt;/span&gt;&lt;span style="font-family: arial;font-size:100%;" &gt;iPhone SDK in &lt;/span&gt;&lt;span style="font-family: arial;font-size:100%;" &gt;Dashcode allows you to create Web Applications for the iPhone and iPod Touch. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;font-size:100%;" &gt;It provides three templates: Custom, Browser and RSS.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dntCV0-zk7c/R9Dn_oZw0DI/AAAAAAAAADc/dIowuyIPQwA/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp0.blogger.com/_dntCV0-zk7c/R9Dn_oZw0DI/AAAAAAAAADc/dIowuyIPQwA/s400/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5174891052211949618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dntCV0-zk7c/R9DoKoZw0EI/AAAAAAAAADk/kpjrG2lNsEM/s1600-h/Picture+2.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp0.blogger.com/_dntCV0-zk7c/R9DoKoZw0EI/AAAAAAAAADk/kpjrG2lNsEM/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5174891241190510658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_dntCV0-zk7c/R9DoVYZw0FI/AAAAAAAAADs/HzTwwXnmnx4/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp3.blogger.com/_dntCV0-zk7c/R9DoVYZw0FI/AAAAAAAAADs/HzTwwXnmnx4/s400/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5174891425874104402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It provides you with fields to specify how to handle orientation changes and zooming.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dntCV0-zk7c/R9Doo4Zw0GI/AAAAAAAAAD0/v0QaLEqNAx0/s1600-h/Picture+4.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp1.blogger.com/_dntCV0-zk7c/R9Doo4Zw0GI/AAAAAAAAAD0/v0QaLEqNAx0/s400/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5174891760881553506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_dntCV0-zk7c/R9DoxIZw0HI/AAAAAAAAAD8/CWMAoqzg1_s/s1600-h/Picture+5.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp2.blogger.com/_dntCV0-zk7c/R9DoxIZw0HI/AAAAAAAAAD8/CWMAoqzg1_s/s400/Picture+5.png" alt="" id="BLOGGER_PHOTO_ID_5174891902615474290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There is a Home Screen icon editor.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dntCV0-zk7c/R9Do-4Zw0II/AAAAAAAAAEE/OZvk84w8rpI/s1600-h/Picture+9.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp1.blogger.com/_dntCV0-zk7c/R9Do-4Zw0II/AAAAAAAAAEE/OZvk84w8rpI/s400/Picture+9.png" alt="" id="BLOGGER_PHOTO_ID_5174892138838675586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is how the Browser template looks when run using the iPhone Simulator.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_dntCV0-zk7c/R9Do_YZw0KI/AAAAAAAAAEU/WXKwEurtpxA/s1600-h/Picture+11.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp3.blogger.com/_dntCV0-zk7c/R9Do_YZw0KI/AAAAAAAAAEU/WXKwEurtpxA/s400/Picture+11.png" alt="" id="BLOGGER_PHOTO_ID_5174892147428610210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dntCV0-zk7c/R9Do_4Zw0LI/AAAAAAAAAEc/osg1pC2lCiQ/s1600-h/Picture+12.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp1.blogger.com/_dntCV0-zk7c/R9Do_4Zw0LI/AAAAAAAAAEc/osg1pC2lCiQ/s400/Picture+12.png" alt="" id="BLOGGER_PHOTO_ID_5174892156018544818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I copied the Ski Report icon from the Dashboard Widget.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_dntCV0-zk7c/R9DpAIZw0MI/AAAAAAAAAEk/LtJIMJMkSZ0/s1600-h/Picture+13.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp2.blogger.com/_dntCV0-zk7c/R9DpAIZw0MI/AAAAAAAAAEk/LtJIMJMkSZ0/s400/Picture+13.png" alt="" id="BLOGGER_PHOTO_ID_5174892160313512130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dntCV0-zk7c/R9DpMoZw0NI/AAAAAAAAAEs/RhXu3E4Fw64/s1600-h/Picture+14.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp0.blogger.com/_dntCV0-zk7c/R9DpMoZw0NI/AAAAAAAAAEs/RhXu3E4Fw64/s400/Picture+14.png" alt="" id="BLOGGER_PHOTO_ID_5174892375061876946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I then tried to dump the contents of the Translation Dashboard widget into an iPhone Web Application. It nearly worked.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_dntCV0-zk7c/R9DpNIZw0OI/AAAAAAAAAE0/PFELZ72uAI8/s1600-h/Picture+15.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp2.blogger.com/_dntCV0-zk7c/R9DpNIZw0OI/AAAAAAAAAE0/PFELZ72uAI8/s400/Picture+15.png" alt="" id="BLOGGER_PHOTO_ID_5174892383651811554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_dntCV0-zk7c/R9DpNYZw0PI/AAAAAAAAAE8/Q0TjHJzmWw4/s1600-h/Picture+16.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp3.blogger.com/_dntCV0-zk7c/R9DpNYZw0PI/AAAAAAAAAE8/Q0TjHJzmWw4/s400/Picture+16.png" alt="" id="BLOGGER_PHOTO_ID_5174892387946778866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The RSS template allows you to enter an RSS field URL and customize which and how many articles should appear.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_dntCV0-zk7c/R9DyNIZw0RI/AAAAAAAAAFM/UTqMSahAYdg/s1600-h/Picture+1.png"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_dntCV0-zk7c/R9DyNIZw0RI/AAAAAAAAAFM/UTqMSahAYdg/s400/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5174902279256461586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I added Slashdot's Home Screen Icon.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dntCV0-zk7c/R9DyNoZw0SI/AAAAAAAAAFU/uA-wDJT3Ky4/s1600-h/Picture+2.png"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_dntCV0-zk7c/R9DyNoZw0SI/AAAAAAAAAFU/uA-wDJT3Ky4/s400/Picture+2.png" alt="" id="BLOGGER_PHOTO_ID_5174902287846396194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Running it in the simulator.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_dntCV0-zk7c/R9DyOIZw0TI/AAAAAAAAAFc/P892BPOeWRg/s1600-h/Picture+4.png"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_dntCV0-zk7c/R9DyOIZw0TI/AAAAAAAAAFc/P892BPOeWRg/s400/Picture+4.png" alt="" id="BLOGGER_PHOTO_ID_5174902296436330802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dntCV0-zk7c/R9DyOoZw0UI/AAAAAAAAAFk/zMynsQLVnoU/s1600-h/Picture+5.png"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_dntCV0-zk7c/R9DyOoZw0UI/AAAAAAAAAFk/zMynsQLVnoU/s400/Picture+5.png" alt="" id="BLOGGER_PHOTO_ID_5174902305026265410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_dntCV0-zk7c/R9DyPIZw0VI/AAAAAAAAAFs/NB1FQp6vDzs/s1600-h/Picture+6.png"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_dntCV0-zk7c/R9DyPIZw0VI/AAAAAAAAAFs/NB1FQp6vDzs/s400/Picture+6.png" alt="" id="BLOGGER_PHOTO_ID_5174902313616200018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_dntCV0-zk7c/R9DylYZw0WI/AAAAAAAAAF0/jrwgC6CLmsI/s1600-h/Picture+7.png"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_dntCV0-zk7c/R9DylYZw0WI/AAAAAAAAAF0/jrwgC6CLmsI/s400/Picture+7.png" alt="" id="BLOGGER_PHOTO_ID_5174902695868289378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_dntCV0-zk7c/R9DymIZw0XI/AAAAAAAAAF8/VqpeXrnTvs8/s1600-h/Picture+8.png"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_dntCV0-zk7c/R9DymIZw0XI/AAAAAAAAAF8/VqpeXrnTvs8/s400/Picture+8.png" alt="" id="BLOGGER_PHOTO_ID_5174902708753191282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_dntCV0-zk7c/R9DymYZw0YI/AAAAAAAAAGE/-EC34f5O_XA/s1600-h/Picture+9.png"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_dntCV0-zk7c/R9DymYZw0YI/AAAAAAAAAGE/-EC34f5O_XA/s400/Picture+9.png" alt="" id="BLOGGER_PHOTO_ID_5174902713048158594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Deploying the Web Application is very easy.&lt;br /&gt;Select "Deploy Web Application" from the File menu, and it outputs a folder that you can put on your server.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dntCV0-zk7c/R9DymoZw0ZI/AAAAAAAAAGM/kE5be2jQSPk/s1600-h/Picture+10.png"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_dntCV0-zk7c/R9DymoZw0ZI/AAAAAAAAAGM/kE5be2jQSPk/s400/Picture+10.png" alt="" id="BLOGGER_PHOTO_ID_5174902717343125906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dntCV0-zk7c/R9Dym4Zw0aI/AAAAAAAAAGU/HrWcVxUKty8/s1600-h/Picture+11.png"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_dntCV0-zk7c/R9Dym4Zw0aI/AAAAAAAAAGU/HrWcVxUKty8/s400/Picture+11.png" alt="" id="BLOGGER_PHOTO_ID_5174902721638093218" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: arial;font-size:100%;" &gt;Apple iPhone SDK with Dashcode allows you to make web apps:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;font-size:100%;" &gt;With Apple iPhone SDK anyone can now code a web application for the iPhone.&lt;br /&gt;How you may well ask?&lt;br /&gt;Well Apple’s iPhone SDK includes a new version of Dashcode which makes easy of web-app development for the iPhone.&lt;br /&gt;&lt;br /&gt;You can start off using the default browsing screen template, (and the interface includes preset styles we associate with the iPhone) or simple code your own.&lt;br /&gt;Those new to iPhone development will be pleased to hear that it is possible for them to take the slider plate and add on gauges, indications, form elements, forward/back buttons and much more, all with a little knowledge of code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;font-family:arial;font-size:100%;"  &gt;One drawback I can possibly see is with the new Dashcode just maybe the web will suddenly be inundated with an abundance of new iPhone web-apps.&lt;br /&gt;More than likely most will not be that good, but then again maybe some amateur developer may develop a really cool web-app, who knows?&lt;br /&gt;So if you are a budding web-app developer, or even if not, go and download the iPhone SDK and have a play at web-app development, you may just be very good at it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;font-family:arial;font-size:100%;"  &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phonesreview.co.uk/wp-content/phoneimages/2008/03/iphonewebapps.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 224px;" src="http://www.phonesreview.co.uk/wp-content/phoneimages/2008/03/iphonewebapps.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-5103953761227537746?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/5103953761227537746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/iphone-sdk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/5103953761227537746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/5103953761227537746'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/iphone-sdk.html' title='The iPhone SDK !'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_dntCV0-zk7c/R9Dn_oZw0DI/AAAAAAAAADc/dIowuyIPQwA/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-2399290616103781615</id><published>2008-03-24T06:58:00.001-07:00</published><updated>2010-10-01T12:46:49.406-07:00</updated><title type='text'></title><content type='html'>&lt;div align="center"&gt;&lt;a href="http://thedashboard-widgets.blogspot.com/" target="_blank"&gt;&lt;img border="0" width="430" src="http://the.dashboard.googlepages.com/TheDashboardSign1.png" height="110" align="top /"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-2399290616103781615?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/2399290616103781615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/blog-post_24.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/2399290616103781615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/2399290616103781615'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/blog-post_24.html' title=''/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-8665767653416923924</id><published>2008-03-24T06:58:00.000-07:00</published><updated>2010-10-01T12:46:49.386-07:00</updated><title type='text'>Generic Ajax Widget</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;As part of this article, I've included a generic Ajax widget that simply grabs a URL and parses out a small section of the &lt;/span&gt;&lt;abbr style="font-family: arial;" title="Document Object Model"&gt;DOM&lt;/abbr&gt;&lt;span style="font-family:arial;"&gt; that I'm interested in.&lt;br /&gt;It’s a good jumping off point to get going with an Ajaxified widget.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;p  style="color: rgb(204, 0, 0);font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://remysharp.com/downloads/ajax_widget.zip"&gt;Download generic Ajax widget&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="color: rgb(204, 0, 0);font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://remysharp.com/downloads/ajax_widget_project.zip"&gt;Download the source &lt;span class="hilite"&gt;Dashcode&lt;/span&gt; Ajax project&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://remysharp.com/downloads/ajax_widget_project.zip"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-size:180%;"&gt;Getting Dashcode&lt;/span&gt;&lt;/h2&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;If you've got a recent version of Leopard or Tiger, the system Disks will contain &lt;/span&gt;&lt;span class="hilite"  style="font-size:100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size:100%;"&gt; in the developer kit (it may be installed already in your &lt;code style="color: rgb(204, 0, 0);"&gt;/Developer/Applications&lt;/code&gt; directory).&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;Apple did have &lt;a href="http://developer.apple.com/tools/dashcode/"&gt;&lt;span class="hilite"&gt;Dashcode&lt;/span&gt; available for download&lt;/a&gt;, but since it expired in July (&lt;a href="http://remysharp.com/2007/04/13/apple-delays-osx-leopard/"&gt;when Leopard was &lt;em&gt;to&lt;/em&gt; come out&lt;/a&gt;) it’s no longer there. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;You can hunt around the Internet for a old mirror if you don't have the CDs.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Once installed, it'll say it’s expired: &lt;a href="http://remysharp.com/2007/07/30/lets-get-dashcode-working-again/"&gt;just get &lt;span class="hilite"&gt;Dashcode&lt;/span&gt; working again&lt;/a&gt;.&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Stability&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:100%;"&gt;&lt;img title="Broken Dashcode Render" alt="Broken Dashcode Render" src="http://remysharp.com/wp-content/uploads/2007/09/broken-dashcode-render.jpg" style="padding: 0pt 0pt 3px 3px; float: right;" height="72" width="178" /&gt;Dashcode is particularly ropy with Safari 3. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;With Safari 2 it’s much more stable.  Since there is the occasional crash from Dashcode, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;I would recommend constantly saving your project as you're coding. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;I found more than 10% of the time, &lt;/span&gt;&lt;span class="hilite"  style="font-size:100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size:100%;"&gt; would crash and result in a total loss of my code from the last save point.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Also, I've noticed that dumping a lot to the run log, when viewing the log, can cause &lt;/span&gt;&lt;span class="hilite"  style="font-size:100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size:100%;"&gt; to slow right down to almost hanging. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Best to avoid dumping large amounts of HTML to the log.&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;However - and this is a big one - the upside of programming with &lt;/span&gt;&lt;span class="hilite"  style="font-size:100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size:100%;"&gt; is worth the risk of the crash, because it’s takes most work out of the design process.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Since you're using it’s &lt;abbr title="Graphical User Interface"&gt;GUI&lt;/abbr&gt; to drag and drop your design and how the user will interact with it, rather than having to code the look and feel by hand.&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-size:180%;"&gt;Designing Widgets&lt;/span&gt;&lt;/h2&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;The interface and the library component of &lt;/span&gt;&lt;span class="hilite"  style="font-size:100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size:100%;"&gt; makes it possibly the strongest app for developing widgets.  It’s 2 minutes work to create a glass effect on your widget, or to place the elements on the window and get going.&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;I would strongly recommend studying other widgets, and reading through the &lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_ProgTopics/index.html#//apple_ref/doc/uid/TP40002837"&gt;&lt;span class="hilite"&gt;Dashcode&lt;/span&gt; design recommendations&lt;/a&gt; as it’s easy to design a widget that works, but twice the work to design a widget that’s usable and works well.&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;You'll find you can place widget-type objects on your widget, like scroll areas or gauges - but to handle them in the code isn't entirely intuitive, which is why the best source of understand how these interface elements work, is by opening up other widgets that already make use of the element.&lt;/span&gt;&lt;/p&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;/span&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;br /&gt;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-size:180%;"&gt;Controls&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:100%;"&gt;Dashcode offers the easy integration of bespoke elements such as the scrollarea, gauges and other such sexy components.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;They're pretty easy to drop on to the widget from &lt;/span&gt;&lt;span class="hilite"  style="font-size:100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size:100%;"&gt;, but until you're coding, they're not immediately obvious how they work.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;The help is limited, so I would recommend to develop by tutorial, in particular, look for the '&lt;span style="color: rgb(204, 0, 0);"&gt;refresh()&lt;/span&gt;' methods - as this seems to be a fairly standard way to redraw objects.&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Full documentation for the &lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_ProgTopics/index.html#//apple_ref/doc/uid/TP40002837"&gt;Apple classes API&lt;/a&gt; is available, but it’s pretty clinical.&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;br /&gt;&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-size:180%;"&gt;Effects&lt;/span&gt;&lt;/h2&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Although effects are available within the Apple classes, you'll need to implement them yourself.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-weight: bold;font-family:arial;" &gt;&lt;span style="font-size:100%;"&gt;This is fairly limited to dynamic resizing of the widget, which is achieved using:&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;pre  style="color: rgb(204, 0, 0);font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;code&gt;window.resizeTo(x, y);&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;If you are going to resize the widget dynamically, check out the &lt;a href="http://developer.apple.com/documentation/AppleApplications/Conceptual/Dashboard_ProgTopics/index.html"&gt;Apple resizing examples&lt;/a&gt; too.  &lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;I used this technique in my &lt;a href="http://leftlogic.com/lounge/articles/entity-lookup/"&gt;HTML entities&lt;/a&gt; widget to keep the widget small when it’s dropped in to the Dashboard, but to allow it to grow dynamically when the user searched for a particular HTML entity.&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;You should be able to find &lt;a href="http://www.google.com/search?q=javascript+easing+effect"&gt;easing effects code and examples&lt;/a&gt; if the built in Apple animation class doesn't suite your needs.&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;h2  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-size:180%;"&gt;Running system commands&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;This is one of the few areas that’s well documented in the provided &lt;a href="http://developer.apple.com/documentation/AppleApplications/Reference/Dashboard_Ref/index.html#//apple_ref/doc/uid/TP40001339"&gt;API&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-weight: bold;font-family:arial;" &gt;&lt;span style="font-size:100%;"&gt;You can run system commands using the following type of command:&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;pre  style="color: rgb(204, 0, 0);font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;code&gt;widget.system('ps -auxww | grep ' + myCommand, null);&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size:100%;"&gt;What you should keep in mind, is that you can run &lt;strong&gt;any&lt;/strong&gt; command through the system method.  This includes Perl, Ruby, AppleScript and anything else that suits your needs. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Using these commands I've recently been able to create a widget that queries &lt;a href="http://remysharp.com/2007/07/03/a-way-to-keep-track-and-in-touch/"&gt;Mail’s SQLite’s database via Perl&lt;/a&gt;. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;It was a case of running the system method and capturing the output (and in my case, eval'ing it from a &lt;abbr title="JavaScript Object Notation"&gt;JSON&lt;/abbr&gt; output).&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;h2 face="arial" style="font-weight: bold;"&gt;&lt;span style="font-size:180%;"&gt;Ajax in the widget&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;You widget supports a variation of the Ajax object (or rather xmlhttprequest object).&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;This version isn't bound by the usual security constraints of a browser - most importantly, it can request content from any domain.  &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;To execute any Ajax requests from your widget, ensure you have the &lt;strong&gt;Allow Network Access&lt;/strong&gt; attribute turned on - otherwise the Ajax will fail without any given reason.&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;For example, you could use Ajax to pull your film page from &lt;a href="http://imdb.com/"&gt;IMDb&lt;/a&gt; and then parse the XML for the elements of interest.  &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;However, if you do want to pull some data from a web page and process it using the DOM returned you have to fiddle the request - in particular the &lt;code style="color: rgb(204, 0, 0);"&gt;responseXML&lt;/code&gt;&lt;span style="color: rgb(204, 0, 0);"&gt; &lt;/span&gt;will be null because the page being returned isn't &lt;code&gt;text/xml&lt;/code&gt; - it’s &lt;code&gt;text/html&lt;/code&gt;.  You can do it using the following (in &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; syntax):&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;pre  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;code&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;$.ajax({&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;url: 'http://remysharp.com/example_page', // doesn't really exist!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;dataType: 'html', // important&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;success: function (xml) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;// convert the HTML to an XML DOM object&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;var dom = getDOMfromXML(xml);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;alert(dom.getElementsByTagName('h1').length);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;});&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;function getDOMfromXML(xml) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;var d = document.createElement('div');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;xml = xml.substring(xml.indexOf('&amp;lt;body') + xml.substring(xml.indexOf('&amp;lt;body')).indexOf('&amp;gt;')+1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;xml = xml.substring(0, xml.indexOf('&amp;lt;/body&amp;gt;'));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;d.innerHTML = xml;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;return d;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;This &lt;code style="color: rgb(204, 0, 0);"&gt;getDOM&lt;/code&gt; function is pretty horrible - but it works.  I tried using &lt;code style="color: rgb(204, 0, 0);"&gt;DOMParser&lt;/code&gt; and tried using &lt;a href="http://web-graphics.com/mtarchive/001606.php"&gt;Ajax local data trick&lt;/a&gt; and I tried using an iframe to inject the XLM - but neither would load the XML properly (in fact it would be blank).&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;The iframe would not load properly because it was still loading the entire frame while I was trying to access it.&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;You can see this in use in the &lt;a href="http://remysharp.com/downloads/ajax_widget.zip"&gt;generic Ajax widget&lt;/a&gt; or download the &lt;a href="http://remysharp.com/downloads/ajax_widget_project.zip"&gt;source &lt;span class="hilite"&gt;Dashcode&lt;/span&gt; project&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;h2 face="arial" style="font-weight: bold;"&gt;&lt;span style="font-size:180%;"&gt;Widget Attributes&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;The widget attributes are fairly self explanatory, but it’s worth knowing:&lt;/span&gt;&lt;/p&gt;&lt;ul  style="font-family:arial;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Allow Network Access is required for Ajax requests&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Allow Command Line Access is required for running external programs, i.e. if you have a Perl script executing some arbitrary task&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p face="arial"&gt;&lt;span style="font-size:100%;"&gt;If you intend to make your widget available in different languages, then this is the place to enter the different strings.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="font-weight: bold;font-family:arial;" &gt;&lt;span style="font-size:130%;"&gt;The Inspector&lt;/span&gt;&lt;/h2&gt;&lt;ul  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Hide items from the default image to present a better widget when it’s installing.  It can to keep the preview of your app looking clean.&lt;/span&gt;&lt;/li&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/ul&gt;&lt;h2 style="font-weight: bold; font-family: arial;"&gt;&lt;span style="font-size:180%;"&gt;Debugging&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p face="arial"&gt;&lt;span class="hilite"  style="font-size:100%;"&gt;Dashcode&lt;/span&gt;&lt;span style="font-size:100%;"&gt; comes with a log that can be viewed during run time.  &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p  style="font-weight: bold;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;You have following debugging tools:&lt;/span&gt;&lt;/p&gt;&lt;ul  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Breakpoints&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Live stack traces&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Evaluate window - to test commands&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p face="arial"&gt;&lt;span style="font-size:100%;"&gt;To write to the log, you need to use &lt;code style="color: rgb(204, 0, 0);"&gt;alert("My debug message");&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-8665767653416923924?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/8665767653416923924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/generic-ajax-widget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/8665767653416923924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/8665767653416923924'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/generic-ajax-widget.html' title='Generic Ajax Widget'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4796989825752694875.post-3268334262566923542</id><published>2008-03-23T20:00:00.000-07:00</published><updated>2010-10-01T12:46:49.423-07:00</updated><title type='text'>Introducing Dashcode</title><content type='html'>&lt;span style="font-size: 100%;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5281575232738797826" src="http://3.bp.blogspot.com/_92YmW8QqZrI/SUvssPHlqQI/AAAAAAAAEns/JpwXTs5mPz4/s400/dashcodie_hero20071018.png" style="display: block; height: 230px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;Now&lt;/span&gt;&lt;span style="font-size: 100%;"&gt; in Mac OS X Snow Leopard, Dashcode lets you quickly and easily build elegant and compelling Dashboard widgets.&lt;br /&gt;Created to meet the need of widget developers, Dashcode combines powerful visual layout tools with a code editor, debugger, and comprehensive package management into a world-class integrated development environment.&lt;br /&gt;It lets you easily and quickly create powerful and useful widgets for yourself, your organization, or even for distribution to the world.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;From the start, Dashboard widgets were designed to be easy to develop. They use the familiar and widely used Web technologies of HTML, JavaScript, and CSS.&lt;br /&gt;Because of the use of standard Web technologies, it's possible to develop a widget using only a text editor, such as TextEdit. However, very few developers are well-versed in creating both great graphical artwork and smoothly functioning code.&lt;br /&gt;As well, it became apparent that the process of packing up a widget and tracking down bugs takes too much time when using just a text editor.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;Dashcode was created to address all of these issues.&lt;br /&gt;It takes care of packaging so that you don't have to create a widget's bundle by hand.&lt;br /&gt;It provides a test runtime with a built-in debugger that's a click away so that you don't have to deploy your widget into Dashboard to test it.&lt;br /&gt;And, it provides rich library of graphic elements for you to use to give your widget a compelling design. These features let you focus on making cool, unique, and polished widgets.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;This article, part of the &lt;a href="http://www.blogger.com/index.html"&gt;Leopard Technology Series for Developers&lt;/a&gt;, introduces you to Dashcode and touches on some of its major features.&lt;br /&gt;You'll soon be on your way to creating your own widgets with Dashcode.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: large;"&gt;A Good Starting Point&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size: 100%;"&gt;One of the first ways that Dashcode helps you to work faster is that it provides several common starter templates to build some of the most popular types of widgets.&lt;br /&gt;The templates range from a basic "Hello, World!" widget to a fairly complex system monitoring widget. All of these templates give you a front and back canvas layout, an icon, and the necessary HTML, CSS, and JavaScript files.&lt;br /&gt;By taking care of these common items that all widgets share, you'll be able to get to the real task of working on what makes your widget unique that much more quickly.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;For example, when you first create a project, you'll be greeted with the following:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Templates" height="414" src="http://developer.apple.com/leopard/overview/images/dashcode_startingpoints.png" style="margin-bottom: 20px; margin-top: 10px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;When you pick one of these templates, everything you need to get started is created  and you can immediately run the widget and get feedback on what you need to do next.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;For example, here are a few widgets created with the provided templates:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode  Samples" height="245" src="http://developer.apple.com/leopard/overview/images/dashcode_samples.png" style="margin-bottom: 20px; margin-top: 10px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;Behind the scenes, when Dashcode creates a new project, it's managing all of the needed files for you. Instead of making you deal with the files in the Finder, Dashcode presents a clean interface to work with them.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;For example, here's a view of a new Photocast widget in Dashcode:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Interface" height="328" src="http://developer.apple.com/leopard/overview/images/dashcode_interface.png" style="margin-bottom: 20px; margin-top: 10px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;This view is the primary Dashcode workspace and gives you access to all of the tools you'll need in order to create, debug, and ship your widgets.&lt;br /&gt;The left side of the Dashcode window holds the Parts Outline.&lt;br /&gt;This gives you quick and easy access to all the various components that make up your widget.&lt;br /&gt;You'll notice that the parts outline gives you structured access to both the front and back of your widget.&lt;br /&gt;As well, it gives you access to the attributes, default image, and icon for your widget.&lt;br /&gt;The following figure shows the attributes editor for the widget.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Attributes" height="351" src="http://developer.apple.com/leopard/overview/images/dashcode_attributes.png" style="margin-bottom: 20px; margin-top: 5px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;The parts outline isn't the only way to navigate through your widget.&lt;br /&gt;You can also use the Search box. When you enter a search term, the parts outline is replaced with a Spotlight-style results listing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Search" height="319" src="http://developer.apple.com/leopard/overview/images/dashcode_search.png" style="margin-bottom: 20px; margin-top: 5px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;The Parts Outline, as well as the Spotlight style search functionality, gives you quick access to any part of your widget that you need to work on.&lt;br /&gt;Now that you can see how to navigate your widget, let's look at actually working with your widget.&lt;/span&gt;&lt;br /&gt;&lt;h3 style="font-family: arial; font-weight: normal;"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="font-family: arial; font-weight: normal;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Workflow&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-size: 100%;"&gt;To help you build a widget, Dashcode provides a helpful workflow for each of the templates it provides. These workflows are tuned for each template and will walk you step-by-step through the process of taking a template and creating a finished widget from it.&lt;br /&gt;You can access this list by clicking the Show Workflow Button.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Workflow" height="408" src="http://developer.apple.com/leopard/overview/images/dashcode_workflow.png" style="margin-bottom: 25px; margin-top: 10px;" width="450" /&gt;&lt;/span&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Working with the Layout Canvas&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;You can manipulate the position of any element in a widget by simply moving it about in the layout. Alignment guides and an absolute position indicator help you adjust your widget's user interface to perfection.&lt;br /&gt;You can also adjust the total size of your widget by using the resize-handle at the lower-right corner of the widget.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Resize" height="296" src="http://developer.apple.com/leopard/overview/images/dashcode_resize.png" style="margin-bottom: 20px; margin-top: 10px;" width="398" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;You can also work with the attributes of any element by selecting the element and bringing up the Inspector (&lt;b&gt;Option-Command-I&lt;/b&gt;).&lt;br /&gt;For example, to change the attributes of the title text in the Photocast starter widget, you could select the text, bring up the Inspector and then change the Character attributes, as shown in the following figure.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Inspector" height="269" src="http://developer.apple.com/leopard/overview/images/dashcode_inspector.png" style="margin-bottom: 20px; margin-top: 10px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;As you adjust the properties for an object, Dashcode makes all of the necessary changes in the widget's CSS file.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;For example, changing the color and adding a drop shadow to the text above results in the following CSS rules being set:&lt;/span&gt;&lt;br /&gt;&lt;pre class="sourcecodebox" style="font-family: arial;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #0b5394;"&gt;&lt;br /&gt;#caption {&lt;br /&gt;position: absolute;&lt;br /&gt;text-align: center;&lt;br /&gt;opacity: 0.75;&lt;br /&gt;overflow: hidden;&lt;br /&gt;background-color: rgb(111, 111, 111);&lt;br /&gt;font-weight: bold;&lt;br /&gt;font-family: Helvetica Neue;&lt;br /&gt;font-size: 18px;&lt;br /&gt;height: 26px;&lt;br /&gt;color: rgb(255, 255, 0);&lt;br /&gt;left: 0px;&lt;br /&gt;top: -1px;&lt;br /&gt;right: 0px;&lt;br /&gt;width: auto;&lt;br /&gt;text-shadow: rgb(0, 0, 0) 2px 2px 4px;&lt;br /&gt;}&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/pre&gt;&lt;pre class="sourcecodebox" style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="sourcecodebox" style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: 100%;"&gt;There's a very direct connection between the actions you take in Dashcode and the resulting changes in the underlying files. Dashcode lets you work in both worlds easily.&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: x-large;"&gt;Editing Code&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size: 100%;"&gt;Dashcode does everything possible to make it easy to work with your widgets graphically. When it's time to add custom behavior, however, you'll need to work with the actual source files.&lt;br /&gt;To edit these files, Dashcode provides a fully-functional code editor for CSS, HTML, and JavaScript files.&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;For example, to further illustrate the connection between actions you take in the Dashcode user interface and the underlying files, here's a view of the CSS tweaks shown above:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Editor" height="307" src="http://developer.apple.com/leopard/overview/images/dashcode_editor.png" style="margin-bottom: 20px; margin-top: 10px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;The Dashcode editor is a serious coder's editor.&lt;br /&gt;It features automatic indentation, syntax highlighting, and on-demand code completion.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;For example, if you were writing a CSS file by hand and wanted to get all of the possible completions starting with font, a quick click of the Option-Escape keys brings up a list, as shown in the following figure:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Codecomplete" height="385" src="http://developer.apple.com/leopard/overview/images/dashcode_codecomplete.png" style="margin-bottom: 30px; margin-top: 10px;" width="401" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;You can also quickly navigate your files by CSS selector or JavaScript function name, as shown in the following figure:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Methodlist" height="376" src="http://developer.apple.com/leopard/overview/images/dashcode_methodlist.png" style="margin-bottom: 25px; margin-top: 10px;" width="420" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: x-large;"&gt;The Library&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-size: 100%;"&gt;Dashcode comes with a comprehensive set of UI widgets that you can use to create your widget's interface.&lt;br /&gt;You can open up the Library using either the Library toolbar button or the &lt;b&gt;Window &amp;gt; Show Library&lt;/b&gt; menu. Not only does the Library give access to UI items, you can also browse your iLife photos, music, and movies to add them to your widget.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Library" height="376" src="http://developer.apple.com/leopard/overview/images/dashcode_library.png" style="margin-bottom: 25px; margin-top: 10px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: x-large;"&gt;Running Your Widget&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size: 100%;"&gt;Once you've created your widget, testing it is easy.&lt;br /&gt;Just press Command-R and it will run in an embedded Dashboard runtime.&lt;br /&gt;You'll even see it "splash" onto your screen.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Run" height="362" src="http://developer.apple.com/leopard/overview/images/dashcode_run.png" style="margin-bottom: 20px; margin-top: 10px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;Once started, your widget is fully functional and runs just like it would in the real Dashboard. Dashcode's embedded runtime, however, gives you the ability to see runtime events and inspect your widget's object model.&lt;br /&gt;It also features the Code Evaluator which allows you to execute arbitrary JavaScript code against your running widget.&lt;br /&gt;This allows you to get a better sense of how your widget is working and can help you debug problems.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;As an example of using the Code Evaluator, if you want to work with the "Loading..." text at the bottom of the Photocast example widget at runtime, you can type the following into the Code Evaluator window:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="sourcecodebox" style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;document.getElementById("loading").innerText =&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="sourcecodebox" style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="sourcecodebox" style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;"Now loading the next photograph..."&lt;/span&gt;&lt;/pre&gt;&lt;pre class="sourcecodebox" style="font-family: arial;"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size: 100%;"&gt;Here's an image showing what this looks like:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Evaluator" height="394" src="http://developer.apple.com/leopard/overview/images/dashcode_evaluator.png" style="margin-bottom: 20px; margin-top: 10px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;With the Code Evaluator, you can manipulate almost every aspect of your widget's runtime object model. For example, you could query the size of an RSS feed and display that information from within the Code Evaluator.&lt;br /&gt;This allows you to try out snippets of JavaScript that you can then integrate into your widget once you're happy with it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-large; font-weight: bold;"&gt;Debugging Support&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;Dashcode wouldn't be a true world-class development environment without one more important feature—a fully functional debugger.&lt;br /&gt;You can set breakpoints in your JavaScript code and walk through your code step by step and inspect the values of your widget's variables.&lt;br /&gt;For example, you could set a breakpoint in the showBack method, which gets called when the user flips a widget over to access its preferences.&lt;br /&gt;Once set, the debugger will stop the execution of the widget within the showBack method and let you step through your code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Debugger" height="435" src="http://developer.apple.com/leopard/overview/images/dashcode_debugger.png" style="margin-bottom: 25px; margin-top: 10px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;In addition to setting breakpoints, you can also have Dashcode log every function and method call that happens as your widget runs, as shown in the following figure:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial; font-size: 100%;"&gt;&lt;img alt="Dashcode Tracing" height="369" src="http://developer.apple.com/leopard/overview/images/dashcode_tracing.png" style="margin-bottom: 20px; margin-top: 10px;" width="450" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;From tracing through your widget's execution to setting breakpoints and stepping through your widget's code, Dashcode gives you the right tools to make sure that your widget works the way you expect it to.&lt;/span&gt;&lt;br /&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: 100%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 style="font-family: arial; font-weight: bold;"&gt;&lt;span style="font-size: x-large;"&gt;Get Started with Snow Leopard&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size: 100%;"&gt;The next generation of the world's most advanced operating system is now available.&lt;br /&gt;Tap into the innovative technologies of Mac OS X Leopard and&lt;br /&gt;design your products with new and compelling features.&lt;br /&gt;With an ADC Premier or Select Membership, you have a  range of developer resources from Apple engineers and experts, including ADC on iTunes, Coding Headstarts, the ADC Compatibility Labs and more.&lt;br /&gt;&lt;a href="http://www.blogger.com/products/index.html"&gt;Learn how&lt;/a&gt; ADC Memberships provide you Apple expertise. From code to market.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4796989825752694875-3268334262566923542?l=dashcode-tips-and-tricks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dashcode-tips-and-tricks.blogspot.com/feeds/3268334262566923542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/introducing-dashcode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/3268334262566923542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4796989825752694875/posts/default/3268334262566923542'/><link rel='alternate' type='text/html' href='http://dashcode-tips-and-tricks.blogspot.com/2008/03/introducing-dashcode.html' title='Introducing Dashcode'/><author><name>MacWidgets</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_EBEWf_aR-ew/SUzoTVvab7I/AAAAAAAAADY/HESmZsTivu8/S220/0+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_92YmW8QqZrI/SUvssPHlqQI/AAAAAAAAEns/JpwXTs5mPz4/s72-c/dashcodie_hero20071018.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
