Sync It Up

Preview:

DESCRIPTION

Sync It Up: Synchronize Your Desktop Data with AIR and SQLite @ FITC Toronto, 2008

Citation preview

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

ME: SEAN VOISENTHIS: SYNC IT UPSynchronizing Desktop Data with AIR and SQLite@ FITC, Toronto on April 21, 2008

•YOU KNOW SOME AS3

•YOU’VE TRIED AIR DEVELOPMENT

•YOU KNOW A LITTLE SQL

A FEW ASSUMPTIONS ...

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

1. WHY SYNCHRONIZE?

2. SYNCHRONIZATION STRATEGIES.

3. DESIGN PATTERNS.

4. SQLITE IN AIR.

5. CONNECTION DETECTION IN AIR.

6. AS3 PROGRAMMING STRATEGIES.

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

WHY SYNCHRONIZE?When it’s not always good to have your head in the “cloud.”

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

•OFFLINE DATA ACCESS

•LARGE DATA SETS

•FASTER START UP TIME

•STORE EPHEMERAL DATA

•EXPORT DATA EASILY

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

SYNCHRONIZATION STRATEGIES.Keeping your data fresh.

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

•USER MAKES CHANGES WHILE OFFLINE

•DATA IS CHANGED ON SERVER BY THIRD PARTIES

•DATA IS CHANGED LOCALLY BY THIRD PARTIES (RSS FEEDS)

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

•REQUIRES USER TO PUSH A BUTTON

•GOOD FOR SHORT SYNC TIMES OR SMALL AMOUNTS OF DATA

•EASIEST TO IMPLEMENT

•BUT ... USER MAY FORGET

MANUAL SYNC

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

BACKGROUND SYNC

•WORKS “BEHIND THE SCENES” WITHOUT INTERVENTION

•USE TIMER OR TRIGGERING EVENTS (PROBABLY BOTH)

•SERVER CAN PUSH DATA (LIVECYCLE DATA SERVICES)

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

•TIMESTAMPS

•“DIRTY” BITS

•DIRECT DATA COMPARISON

•COLLISIONS: CLIENT OVERRIDES SERVER, SERVER OVERRIDES CLIENT

WHAT TO SYNC

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

DESIGN PATTERNSMake it beautiful and usable.

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

•PATTERN: AN APPROPRIATE AND SUCCESSFUL APPROACH TO A PROBLEM.

BRETT RAMPATA

•ACCOMODATES BOTH MANUAL AND BACKGROUND SYNCHRONIZATION

•UNOBTRUSIVE

•CONNECTION AVAILABILITY AND SYNC ARE VISUALLY LINKED

DEMO: PAYPAL DESKTOP.A combined project of Adobe XD and PayPal, with a little help from yours truly.

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

SQLite in AIR.What you need to know to get your feet wet.

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

•EMBEDDED SQL DATABASE ENGINE

•NO SETUP, NO SERVER

•DATABASE IS STORED AS A SINGLE FILE

•MOST OF SQL92 SUPPORTED

•INCLUDING THE ADVANCED STUFF LIKE VIEWS, TRANSACTIONS AND TRIGGERS!

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

DATA TYPES in SQLite

•SQLite USES TYPE AFFINITIES

•TYPE “AFFINITY” = RECOMMENDED, BUT NOT REQUIRED

•THE NORMAL SQLite AFFINITIES:

•NULL, INTEGER, REAL, TEXT, BLOB

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

•ADDITIONAL TYPE AFFINITIES AVAILABLE FOR AIR:

•TEXT, NUMERIC, INTEGER, REAL, BOOLEAN, DATE, XML, XMLList, OBJECT, NONE

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

1. CREATE A File REFERENCE FOR THE DB

2. CREATE A SQLConnection INSTANCE

3. OPEN SQLConnection ON FILE

4. CREATE A QUERY USING SQLStatement

5. EXECUTE THE QUERY

THE BASICS

var db:File = File.applicationStorageDirectory.resolvePath("filename.db");

var connection:SQLConnection = new SQLConnection();connection.openAsync(db, SQLMode.CREATE);

var stmt:SQLStatement = new SQLStatement();stmt.sqlConnection = connection;stmt.text = "SELECT * FROM mytable";stmt.addEventListener( SQLEvent.RESULT, onResult );stmt.execute();

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

•SQLConnection SUPPORTS BOTH SYNCHRONOUS AND ASYNCHRONOUS CONNECTIONS

•SYNC: APP INTERACTIVITY BLOCKED UNTIL COMPLETE (LIKE FILE I/O API)

•ASYNC: USES EVENT LISTENERS AND QUERIES ARE QUEUED

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

var stmt:SQLStatement = new SQLStatement();stmt.text = "SELECT * FROM mytable WHERE id = :id";stmt.parameters[":id"] = 5;stmt.execute();

•CACHES QUERY FOR FASTER EXECUTION

•PREVENTS INJECTION VULNERABILITY

ABOUT PARAMETERS

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

ABOUT RESULT PAGING

•SQLStatement SUPPORTS PAGING

•LIMITS NUMBER OF ROWS RETURNEDvar statement:SQLStatement = new SQLStatement();statement.sqlConnection = mySQLConnection;statement.text = "SELECT * FROM contacts";statement.execute( 10 );

statement.next();

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

ABOUT TRANSACTIONS

•MULTIPLE STATEMENTS (USING LOOPS) IN ONE WRITE OPERATION

•ALLOWS ROLLBACKS ON ERRORvar stmt:SQLStatement = new SQLStatement();stmt.sqlConnection = connection;stmt.text = "INSERT INTO tasks VALUES(:task)";connection.begin();for each( var task:String in tasks ) {

stmt.parameters[":task"] = task;stmt.execute();

}connection.commit();

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

CONNECTION DETECTION in AIR.Is this thing on?

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

•NATIVENativeApplication.nativeApplication.addEventListener( Event.NETWORK_CHANGE, onNetworkChange );

•ONLY DETECTS A CHANGE!

•SERVICE MONITOR FRAMEWORK

•URLMonitorvar m:URLMonitor = new URLMonitor(

new URLRequest('http://myurl.com') );m.addEventListener( StatusEvent.STATUS, onStatus );m.start();

•SocketMonitor

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

AS3 PROGRAMMING STRATEGIESA few tips to make your life easier.

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

CREATE DAOs

•DAO = DATA ACCESS OBJECT

•SINGLETON or STATIC CLASS

•ABSTRACTS SQL MANIPULATION, HANDLES CRUD OPERATIONS

•ONE PLACE FOR DB ACCESS and HANDLING DB ERRORS

public class ContactsDAO {private static var instance:ContactsDAO;public function ContactsDAO() {

if( ContactsDAO.instance != null ) {throw new Error("Singleton!");

}}

public static function getInstance():ContactsDAO {if( ContactsDAO.instance == null ) {

ContactsDAO.instance = new ContactsDAO();}return ContactsDAO.instance;

}

public function getAllContacts( resultHandler:Function, faultHandler:Function ):void {

var statement:SQLStatement = new SQLStatement(); statement.sqlConnection = mySQLConnection; statement.text = "SELECT * FROM contacts"; statement.execute( -1, new Responder(

function( result:SQLResult ):void {resultHandler.call( this, result.data );

}, faultHandler ));

}}

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

USE “IF NOT EXISTS”

•CREATE TABLES WHEN DB IS OPENED IF THEY DON’T EXISTvar statement:SQLStatement = new SQLStatement();statement.sqlConnection = mySQLConnection;statement.text = "CREATE TABLE IF NOT EXISTS mytable (" +

"id INTEGER PRIMARY KEY AUTOINCREMENT," +"first_name TEXT," +"last_name TEXT)";

statement.addEventListener( SQLEvent.RESULT, onResult );statement.execute();

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

WATCH FOR MEMORY LEAKS•DATA QUERIED FROM SQL STORED IN

Array/ArrayCollection

•DATA CAN’T BE USED DIRECTLY FROM DB IN GRIDS, CHARTS, ETC.

•RELOAD ALL DATA IN ARRAYS? OR INDIVIDUAL ITEMS?

•USE FLEX 3 PROFILER

DEMO: LibrarianFree sample code to be posted on voisen.org

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

USE SQLiteAdmin

•USED TO HANDY TOOLS LIKE PHPMyAdmin? Try:

http://coenraets.org/blog/2008/02/sqlite-admin-for-air-10/

DEMO: SQLite Admin.By Christophe Coenraets.

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

RESOURCES•CHRISTOPHE COENRAETS: coenraets.org -

SQLite Admin for AIR

•PETER ELST: peterelst.com - SQLite Wrapper Classes

•PAUL ROBERTSON: probertson.com - Insider info on AIR SQLite

•ADOBE XD: xd.adobe.com

Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

QUESTIONS?Web: http://voisen.orgE-mail: sean@voisen.org

Recommended