37
Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license. ME: SEAN VOISEN THIS: SYNC IT UP Synchronizing Desktop Data with AIR and SQLite @ FITC, Toronto on April 21, 2008

Sync It Up

  • Upload
    svoisen

  • View
    1.395

  • Download
    1

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Sync It Up

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

Page 2: Sync It Up

•YOU KNOW SOME AS3

•YOU’VE TRIED AIR DEVELOPMENT

•YOU KNOW A LITTLE SQL

A FEW ASSUMPTIONS ...

Page 3: Sync It Up

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.

Page 4: Sync It Up

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.”

Page 5: Sync It Up

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

Page 6: Sync It Up

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

SYNCHRONIZATION STRATEGIES.Keeping your data fresh.

Page 7: Sync It Up

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)

Page 8: Sync It Up

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

Page 9: Sync It Up

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)

Page 10: Sync It Up

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

Page 11: Sync It Up

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

DESIGN PATTERNSMake it beautiful and usable.

Page 12: Sync It Up

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

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

Page 13: Sync It Up

BRETT RAMPATA

Page 14: Sync It Up

•ACCOMODATES BOTH MANUAL AND BACKGROUND SYNCHRONIZATION

•UNOBTRUSIVE

•CONNECTION AVAILABILITY AND SYNC ARE VISUALLY LINKED

Page 15: Sync It Up

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

Page 16: Sync It Up

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.

Page 17: Sync It Up

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!

Page 18: Sync It Up

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

Page 19: Sync It Up

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

Page 20: Sync It Up

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

Page 21: Sync It Up

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();

Page 22: Sync It Up

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

Page 23: Sync It Up

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

Page 24: Sync It Up

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();

Page 25: Sync It Up

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();

Page 26: Sync It Up

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

CONNECTION DETECTION in AIR.Is this thing on?

Page 27: Sync It Up

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

Page 28: Sync It Up

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

AS3 PROGRAMMING STRATEGIESA few tips to make your life easier.

Page 29: Sync It Up

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

Page 30: Sync It Up

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 ));

}}

Page 31: Sync It Up

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();

Page 32: Sync It Up

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

Page 33: Sync It Up

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

Page 34: Sync It Up

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/

Page 35: Sync It Up

DEMO: SQLite Admin.By Christophe Coenraets.

Page 36: Sync It Up

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

Page 37: Sync It Up

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

QUESTIONS?Web: http://voisen.orgE-mail: [email protected]