Dart Cookbook
By Ivo Balbaert
()
About this ebook
Dart is a new open source programming language for the Web, developed at Google, with a steadily growing community. It is a single language for both client and server, and is apt for the complete range of devices on the Web, including phones, tablets, laptops, and servers. Stop solving new challenges with the same old tools—let Dart show you a new, simpler, and more unified way, which makes use of the same language for both client and server.
This book is a pragmatic guide that will increase your expertise in writing all kinds of applications, including web apps, scripts, and server-side apps. It provides rich insights on how to extend your Dart programming skills.
Ivo Balbaert
Ivo Balbaert is a programming teacher and Crystal enthusiast. He has a Ph.D. in Applied Physics and has worked for 25 years in the software industry as a developer and project manager in several companies. Now he combines teaching and consultancy with technical writing. He is particularly interested in elegant emerging languages for concurrency and distributed processing.
Read more from Ivo Balbaert
Learning Dart - Second Edition Rating: 0 out of 5 stars0 ratingsThe Way to Go: A Thorough Introduction to the Go Programming Language Rating: 2 out of 5 stars2/5Learning Dart Rating: 0 out of 5 stars0 ratingsJulia: High Performance Programming Rating: 0 out of 5 stars0 ratingsRust Essentials - Second Edition: A quick guide to writing fast, safe, and concurrent systems and applications Rating: 0 out of 5 stars0 ratingsLearn Red – Fundamentals of Red: Get up and running with the Red language for full-stack development Rating: 0 out of 5 stars0 ratings
Related to Dart Cookbook
Related ebooks
Laravel Application Development Cookbook Rating: 0 out of 5 stars0 ratingsApache Maven Cookbook Rating: 0 out of 5 stars0 ratingsGroovy 2 Cookbook Rating: 0 out of 5 stars0 ratingsSwift Cookbook Rating: 5 out of 5 stars5/5Mastering Dart Rating: 0 out of 5 stars0 ratingsFlutter in Action Rating: 1 out of 5 stars1/5Application Development with Swift Rating: 0 out of 5 stars0 ratingsDart Essentials Rating: 0 out of 5 stars0 ratingsDart By Example Rating: 0 out of 5 stars0 ratingsBeginning Flutter: A Hands On Guide to App Development Rating: 0 out of 5 stars0 ratingsFlutter for Beginners: An introductory guide to building cross-platform mobile applications with Flutter and Dart 2 Rating: 0 out of 5 stars0 ratingsReact to Python: Creating React Front-End Web Applications with Python Rating: 0 out of 5 stars0 ratingsProgramming Kotlin Rating: 0 out of 5 stars0 ratingsDart in Action Rating: 0 out of 5 stars0 ratingsGradle for Android Rating: 0 out of 5 stars0 ratingsJava Hibernate Cookbook Rating: 0 out of 5 stars0 ratingsSvelte and Sapper in Action Rating: 2 out of 5 stars2/5React Projects: Build 12 real-world applications from scratch using React, React Native, and React 360 Rating: 0 out of 5 stars0 ratingsNode.js Design Patterns Rating: 4 out of 5 stars4/5Flutter For Dummies Rating: 0 out of 5 stars0 ratingsReact Hooks in Action: With Suspense and Concurrent Mode Rating: 5 out of 5 stars5/5Flutter and Dart: Up and Running: Build native apps for both iOS and Android using a single codebase (English Edition) Rating: 0 out of 5 stars0 ratingsNode.js Web Development - Third Edition Rating: 2 out of 5 stars2/5Tanmay Teaches Go: The Ideal Language for Backend Developers Rating: 0 out of 5 stars0 ratingsReact: Building Modern Web Applications Rating: 5 out of 5 stars5/5Node.js Design Patterns - Second Edition Rating: 4 out of 5 stars4/5React Native in Action: Developing iOS and Android apps with JavaScript Rating: 5 out of 5 stars5/5Mastering Reactive JavaScript Rating: 0 out of 5 stars0 ratingsKotlin in Action Rating: 5 out of 5 stars5/5
Programming For You
Excel : The Ultimate Comprehensive Step-By-Step Guide to the Basics of Excel Programming: 1 Rating: 5 out of 5 stars5/5Learn to Code. Get a Job. The Ultimate Guide to Learning and Getting Hired as a Developer. Rating: 5 out of 5 stars5/5Python Programming : How to Code Python Fast In Just 24 Hours With 7 Simple Steps Rating: 4 out of 5 stars4/5Coding All-in-One For Dummies Rating: 4 out of 5 stars4/5Grokking Algorithms: An illustrated guide for programmers and other curious people Rating: 4 out of 5 stars4/5SQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL Rating: 4 out of 5 stars4/5Python: Learn Python in 24 Hours Rating: 4 out of 5 stars4/5Excel 101: A Beginner's & Intermediate's Guide for Mastering the Quintessence of Microsoft Excel (2010-2019 & 365) in no time! Rating: 0 out of 5 stars0 ratingsSQL All-in-One For Dummies Rating: 3 out of 5 stars3/5Learn PowerShell in a Month of Lunches, Fourth Edition: Covers Windows, Linux, and macOS Rating: 5 out of 5 stars5/5Beginning Programming with C++ For Dummies Rating: 4 out of 5 stars4/5C Programming For Beginners: The Simple Guide to Learning C Programming Language Fast! Rating: 5 out of 5 stars5/5Python: For Beginners A Crash Course Guide To Learn Python in 1 Week Rating: 4 out of 5 stars4/5Raspberry Pi Electronics Projects for the Evil Genius Rating: 3 out of 5 stars3/5Linux: Learn in 24 Hours Rating: 5 out of 5 stars5/5iPhone For Dummies Rating: 0 out of 5 stars0 ratingsJavaScript All-in-One For Dummies Rating: 5 out of 5 stars5/5Python Crash Course, 3rd Edition: A Hands-On, Project-Based Introduction to Programming Rating: 4 out of 5 stars4/5PYTHON: Practical Python Programming For Beginners & Experts With Hands-on Project Rating: 5 out of 5 stars5/5
Reviews for Dart Cookbook
0 ratings0 reviews
Book preview
Dart Cookbook - Ivo Balbaert
Table of Contents
Dart Cookbook
Credits
About the Author
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers, and more
Why Subscribe?
Free Access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. Working with Dart Tools
Introduction
Configuring the Dart environment
Getting ready
How to do it...
How it works...
Setting up the checked and production modes
Getting ready
How to do it...
How it works...
There's more...
See also
Rapid Dart Editor troubleshooting
Getting ready
How to do it...
How it works...
There's more...
Hosting your own private pub mirror
How to do it...
How it works...
Using Sublime Text 2 as an IDE
Getting ready
How to do it...
How it works...
See also
Compiling your app to JavaScript
How to do it...
How it works...
There's more...
Producing more readable JavaScript code
Producing a single Dart file
See also
Debugging your app in JavaScript for Chrome
How to do it…
How it works...
There's more...
Debugging your app in JavaScript for Firefox
Using the command-line tools
How to do it...
See also
Solving problems when pub get fails
Getting ready
How to do it...
How it works...
There's more...
Shrinking the size of your app
How to do it...
How it works...
There's more...
More Information Section 1
See also
Making a system call
How to do it...
How it works...
Using snapshotting
How to do it...
How it works...
There's more...
See also
Getting information from the operating system
Getting ready
How to do it...
How it works...
There's more...
2. Structuring, Testing, and Deploying an Application
Introduction
Exiting from an app
How to do it...
How it works...
Parsing command-line arguments
How to do it...
How it works...
See also
Structuring an application
Getting ready
How to do it...
How it works...
There's more...
See also
Using a library from within your app
How to do it...
How it works...
There's more...
Microtesting your code with assert
How to do it...
How it works...
There's more...
Unit testing a Polymer web app
Getting ready
How to do it...
How it works...
See also
Adding logging to your app
Getting ready
How to do it...
How it works...
There's more...
Documenting your app
Getting ready
How to do it...
How it works...
There's more...
Profiling and benchmarking your app
Getting ready
How to do it...
How it works...
See also
Publishing and deploying your app
Getting ready
How to do it...
How it works...
There's more...
Using different settings in the checked and production modes
How to do it...
How it works...
3. Working with Data Types
Introduction
Concatenating strings
How to do it...
How it works...
There's more...
Using regular expressions
How to do it...
How it works...
There's more...
Strings and Unicode
How to do it...
How it works...
There's more...
Using complex numbers
How to do it...
How it works...
There's more...
Creating an enum
How to do it...
How it works...
There's more...
Flattening a list
How to do it...
How it works...
There's more...
Generating a random number within a range
How to do it...
How it works...
Getting a random element from a list
How to do it...
How it works...
See also
Working with dates and times
How to do it...
How it works...
There's more...
Improving performance in numerical computations
How to do it...
How it works...
There's more...
Working with JavaScript
Parsing numbers
See also
Using SIMD for enhanced performance
How to do it…
How it works...
See also
4. Object Orientation
Introduction
Testing and converting types
How to do it...
How it works...
There's more...
See also
Comparing two objects
How to do it...
How it works...
There's more...
See also
Using a factory constructor
How to do it...
How it works...
There's more...
Building a singleton
How to do it...
How it works...
Using reflection
Getting ready
How to do it...
How it works...
There's more...
See also
Using mixins
How to do it...
How it works...
There's more...
Using annotations
How to do it...
How it works...
There's more...
See also
Using the call method
How to do it...
How it works...
There's more...
Using noSuchMethod
How to do it...
How it works...
There's more...
See also
Making toJSON and fromJSON methods in your class
Getting ready
How to do it...
How it works...
There's more...
Creating common classes for client and server apps
How to do it...
How it works...
There's more…
See also
5. Handling Web Applications
Introduction
Responsive design
How to do it...
How it works...
See also
Sanitizing HTML
How to do it...
How it works...
Using a browser's local storage
How to do it...
How it works...
There's more...
See also
Using application cache to work offline
How to do it...
How it works...
There's more...
Preventing an onSubmit event from reloading the page
How to do it...
How it works...
Dynamically inserting rows in an HTML table
How to do it...
How it works...
See also...
Using CORS headers
How to do it...
How it works...
There's more...
Using keyboard events
How to do it...
How it works...
There's more...
Enabling drag-and-drop
How to do it...
How it works...
See also
Enabling touch events
How to do it...
How it works...
There's more...
See also
Creating a Chrome app
How to do it...
How it works...
There's more...
See also
Structuring a game project
How to do it...
How it works...
There's more...
See also
Using WebGL in your app
How to do it...
How it works...
There's more...
See also
Authorizing OAuth2 to Google services
How to do it...
How it works...
There's more...
See also
Talking with JavaScript
How to do it...
How it works...
There's more...
See also
Using JavaScript libraries
How to do it...
How it works...
See also
6. Working with Files and Streams
Introduction
Reading and processing a file line by line
How to do it...
How it works...
See also
Writing to a file
How to do it...
How it works...
There's more...
Searching in a file
How to do it...
How it works...
See also
Concatenating files
How to do it...
How it works...
There's more...
See also
Downloading a file
Getting ready
How to do it...
How it works...
There's more...
Using pipe
Using the http package
See also
Working with blobs
Getting ready
How to do it...
How it works...
Transforming streams
How to do it...
How it works...
There's more...
See also
7. Working with Web Servers
Introduction
Creating a web server
How to do it...
How it works...
There is more...
Posting JSON-formatted data
How to do it...
How it works...
See also
Receiving data on the web server
How to do it...
How it works...
There's more...
Writing data to a file on the server
See also
Serving files with http_server
How to do it...
How it works...
There's more...
Using sockets
How to do it...
How it works...
There's more...
Using WebSockets
Getting ready
How to do it...
How it works...
There's more...
See also
Using secure sockets and servers
Getting ready
How to do it...
How it works...
See also
Using a JSON web service
Getting ready
How to do it...
How it works...
See also
8. Working with Futures, Tasks, and Isolates
Introduction
Writing a game loop
How to do it...
How it works...
There's more...
See also
Error handling with Futures
Getting ready
How to do it...
How it works...
Scheduling tasks using Futures
How to do it...
How it works...
See also
Running a recurring function
How to do it...
How it works...
There's more...
See also
Using isolates in the Dart VM
How to do it...
How it works...
There's more...
See also
Using isolates in web apps
How to do it...
How it works...
See also
Using multiple cores with isolates
How to do it...
How it works...
Using the Worker Task framework
How to do it...
How it works...
There's more…
See also
9. Working with Databases
Introduction
Storing data locally with IndexedDB
How to do it...
How it works...
See also
Using Lawndart to write offline web apps
How to do it...
How it works...
See also
Storing data in MySQL
Getting ready
How to do it...
How it works...
There's more...
Storing data in PostgreSQL
Getting ready
How to do it...
How it works...
See also
Storing data in Oracle
Getting ready
How to do it...
How it works...
There's more…
Storing data in MongoDB
Getting ready
How to do it...
How it works...
See also
Storing data in RethinkDB
Getting ready
How to do it...
How it works...
See also
10. Polymer Dart Recipes
Introduction
Data binding with polymer.dart
How to do it...
How it works...
There's more…
Binding and repeating over a list
How to do it...
How it works...
There's more...
Binding to a map
How to do it...
How it works...
See also
Using custom attributes and template conditionals
How to do it...
How it works...
See also
Binding to an input text field or a text area
How to do it...
How it works...
Binding to a checkbox
How to do it...
How it works...
See also
Binding to radio buttons
How to do it...
How it works...
Binding to a selected field
How to do it...
How it works...
Event handling
How to do it...
How it works...
Polymer elements with JavaScript interop
How to do it...
How it works...
See also
Extending DOM elements
How to do it...
How it works...
Working with custom elements
How to do it...
How it works...
There's more...
Automatic node finding
How to do it...
How it works...
Internationalizing a Polymer app
How to do it...
How it works...
There's more...
11. Working with Angular Dart
Introduction
Setting up an Angular app
How to do it...
How it works...
There's more...
Using a controller
How to do it...
How it works...
There's more...
Using a component
How to do it...
How it works...
There's more...
See also
Using formatters as filters
How to do it...
How it works...
See also
Creating a view
How to do it...
How it works...
Using a service
How to do it...
How it works...
See also
Deploying your app
How to do it...
How it works...
See also
Index
Dart Cookbook
Dart Cookbook
Copyright © 2014 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: October 2014
Production reference: 1171014
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78398-962-1
www.packtpub.com
Credits
Author
Ivo Balbaert
Reviewers
Sergey Akopkokhyants
Claudio d'Angelis
Joris Hermans
Acquisition Editor
Sam Wood
Content Development Editor
Azharuddin Sheikh
Technical Editor
Anand Singh
Copy Editors
Sarang Chari
Adithi Shetty
Project Coordinator
Kinjal Bari
Proofreaders
Simran Bhogal
Maria Gould
Ameesha Green
Indexer
Monica Ajmera Mehta
Production Coordinator
Alwin Roy
Cover Work
Alwin Roy
About the Author
Ivo Balbaert is currently a lecturer in (Web) Programming and Databases at CVO Antwerpen (www.cvoantwerpen.be), a community college in Belgium. He received a PhD in Applied Physics from the University of Antwerp in 1986. He worked for 20 years in the software industry as a developer and consultant for several companies, and for 10 years as a project manager at the Antwerp University Hospital. In 2000, he switched to partly teaching and partly developing software (KHM Mechelen, CVO Antwerp).
Ivo also wrote an introductory book in Dutch about developing in Ruby and Rails called Programmeren met Ruby en Rails, Van Duuren Media, 2009. In 2012, he authored a book on the Go programming language called The Way To Go, iUniverse. Last year, in collaboration with Dzenan Ridzanovic, he also wrote Learning Dart, Packt Publishing.
I would like to thank my wife, Christiane, for her support and patience during the development of this book.
About the Reviewers
Sergey Akopkokhyants is a software architect with more than 20 years of professional experience in designing and developing client- and server-side applications. He is also a certified Java developer and project manager. He has general knowledge of many tools, languages, and platforms. For the last 5 years, he has been responsible for customizing and producing web-oriented applications for wholesale business management solutions projects; he has been doing this for several worldwide mobile communication companies. Sergey's responsibilities include architecture design and guidance of client software development using Flex, ActionScript, HTML, JavaScript, and client-server integration with Java. He is also the founder of and an active contributor to several open source projects on GitHub, including the Dart Web Toolkit (DWT) and Angular Dart UI. He is passionate about web design and development and likes sharing his expertise with others, helping them to increase their skills and productivity. Also, he was one of the reviewers of Learning Dart, Packt Publishing.
Claudio d'Angelis is an Italian programmer with 10 years of experience in document digitization, web development, and Linux administration. As an early adopter of Dart, he continues to contribute to the community. His contributions include writing articles, open source projects, speaking at conferences, and presenting episodes on Google Developers Live.
Joris Hermans is a web developer enthusiast who works for Truvo, an online directory company. He is also the proud owner of lots of Dart packages, a real-time dart framework named force, a search engine named Bounty Hunter, a persistent abstraction layer named cargo, a dependency injection for Dart called wired, and so on. He also likes to speak about the Web and Dart, so it is possible that you will meet him at a conference.
www.PacktPub.com
Support files, eBooks, discount offers, and more
You might want to visit www.PacktPub.com for support files and downloads related to your book.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
http://PacktLib.PacktPub.com
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can access, read and search across Packt's entire library of books.
Why Subscribe?
Fully searchable across every book published by Packt
Copy and paste, print and bookmark content
On demand and accessible via web browser
Free Access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view nine entirely free books. Simply use your login credentials for immediate access.
Preface
Dart is the new open source programming language for the Web, developed by Google with a steadily growing popularity; it is a single language for both the client and server, which is appropriate for a full range of devices on the Web—including phones, tablets, laptops, and servers. It encompasses the lessons of the last two decades of web programming. This book provides you with a broad range of step-by-step recipes that will increase your expertise in writing all kinds of Dart applications, including web apps, scripts, and server-side apps. It can be used as a companion to Learning Dart, Dzenan Ridzanovic and Ivo Balbaert, Packt Publishing.
What this book covers
Chapter 1, Working with Dart Tools, talks about increasing your mastery of the Dart tools and platform. We discuss some of the more advanced and hidden features of the Dart Editor, such as configuration, compilation to JavaScript, and the pub package manager. When relevant, we also take a look at how to perform tasks with command-line tools.
Chapter 2, Structuring, Testing, and Deploying an Application, focuses mainly on all the different tasks in the life cycle of your project that make it more professional, helping you save a lot of time during the maintenance phase. This includes structuring the project and installing a logging tool in it and then testing, documenting, profiling, and publishing it.
Chapter 3, Working with Data Types, is about working with the different data types Dart has to offer. We will talk about the basic data types as well as strings, random numbers, complex numbers, dates and times, enums, and lists. Along the way, we will cover many tricks that will help you out in specific circumstances.
Chapter 4, Object Orientation, delves deeper into the object-oriented nature of Dart to find some new techniques and insights that will help us to be more productive in building our apps.
Chapter 5, Handling Web Applications, covers a wide range of web-related topics dealing with safety, browser storage, caching, event handling, WebGL, and of course, Dart working together with JavaScript.
Chapter 6, Working with Files and Streams, shows you how to work with files in different circumstances, both in synchronous and asynchronous ways. We will delve into the code to download a file both on a web and server clients, with blobs as a special case. We also discuss how transforming a stream works.
Chapter 7, Working with Web Servers, looks at how you can write full-fledged and performant web servers in Dart, more specifically how to receive data on the server, how to serve files, and how to deploy a web service. Sockets and their secure variants, as well as web sockets, are also discussed.
Chapter 8, Working with Futures, Tasks, and Isolates, concentrates on the asynchronous tools in Dart to write elegant code in future and combine their possibilities with the execution of tasks and isolates to enhance the concurrency of our apps.
Chapter 9, Working with Databases, explains how to store data in databases, on the client or server or both. On the client side, we look at IndexedDB and the Lawndart data manager. Then, we investigate how to store data on the server in SQL as well as NoSQL database systems.
Chapter 10, Polymer Dart Recipes, shows how to use Polymer to modularize the way a web client interface is built by using web components that encapsulate structure, style, and behavior. The structure and style come from a combination of HTML5 and CSS with special extensions that enable two-way data binding. Behavior is described by code contained in a class that hooks up with the component.
Chapter 11, Working with Angular Dart, covers how Angular makes it possible to write web-based apps with Model-View-Controller (MVC) capabilities in order to make both development and testing easier. The templating system is discussed along with controllers, components, views, formatters, and services.
What you need for this book
To work with this book's code, you need the Dart SDK and Dart Editor, which you can download from www.dartlang.org. Simply unzip the downloaded file and you are good to go. Because Dart Editor is based on Eclipse, you also need a Java Runtime (http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html). Choose the appropriate version for your system (32-bit or 64-bit); after the download, double-click on the .exe file to install it.
Who this book is for
If you want to become a better Dart developer and get insights and tips on how to put that knowledge into practice, then this book is for you. Because Dart runs on both clients and servers, web, mobile, and server-side developers alike can benefit from these recipes. The book assumes you know the basics of Dart and have some Dart code. You should also have a basic knowledge of HTML and how web applications with browser clients and servers work.
Conventions
In this book, you will find a number of styles of text that distinguish between different kinds of information. Here are some examples of these styles, and an explanation of their meaning.
Code words in text, database table names, folder names, filenames, file extensions, pathnames, dummy URLs, user input, and Twitter handles are shown as follows: In the checked mode, types are checked by calling assertions of the form assert (var1 is T), to control that var1 is of type T
.
A block of code is set as follows:
main() {
// running an external program process without interaction:
Process.run('notepad', ['tst.txt']).then((ProcessResultrs){
print(rs.exitCode);
print(rs.stdout);
print(rs.stderr);
});
}
When we wish to draw your attention to a particular part of a code block, the relevant lines or items are set in bold:
main() {
// running an external program process without interaction:
Process.run('notepad', ['tst.txt']).then((ProcessResultrs){
print(rs.exitCode);
print(rs.stdout);
print(rs.stderr);
});
}
Any command-line input or output is written as follows:
# cp /usr/src/asterisk-addons/configs/cdr_mysql.conf.sample /etc/asterisk/cdr_mysql.conf
New terms and important words are shown in bold. Words that you see on the screen, in menus or dialog boxes for example, appear in the text like this: First try this; right-click on your project and select Close Folder.
Note
Warnings or important notes appear in a box like this.
Tip
Tips and tricks appear like this.
Reader feedback
Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or may have disliked. Reader feedback is important for us to develop titles that you really get the most out of.
To send us general feedback, simply send an e-mail to <feedback@packtpub.com>, and mention the book title via the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide on www.packtpub.com/authors.
Customer support
Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.
Downloading the example code
You can download the example code files for all Packt books you have purchased from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
Errata
Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you would report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting your