Slideshare.net (beta)

 

All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 0 (more)

Sync It Up

From svoisen, 4 months ago

Sync It Up: Synchronize Your Desktop Data with AIR and SQLite @ FI more

664 views  |  0 comments  |  0 favorites  |  4 downloads  |  2 embeds (Stats)
Embed
options

More Info

This slideshow is Public
Total Views: 664
on Slideshare: 445
from embeds: 219

Slideshow transcript

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

Slide 2: A FEW ASSUMPTIONS ... •YOU KNOW SOME AS3 •YOU’VE TRIED AIR DEVELOPMENT •YOU KNOW A LITTLE SQL

Slide 3: 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.

Slide 4: 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.

Slide 5: •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.

Slide 6: SYNCHRONIZATION STRATEGIES. Keeping your data fresh. Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 7: •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.

Slide 8: MANUAL SYNC •REQUIRES USER TO PUSH A BUTTON •GOOD FOR SHORT SYNC TIMES OR SMALL AMOUNTS OF DATA •EASIEST TO IMPLEMENT •BUT ... USER MAY FORGET Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 9: 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.

Slide 10: WHAT TO SYNC •TIMESTAMPS •“DIRTY” BITS •DIRECT DATA COMPARISON •COLLISIONS: CLIENT OVERRIDES SERVER, SERVER OVERRIDES CLIENT Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 11: DESIGN PATTERNS Make it beautiful and usable. Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 12: •PATTERN: AN APPROPRIATE AND SUCCESSFUL APPROACH TO A PROBLEM. Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 13: BRETT RAMPATA

Slide 14: •ACCOMODATES BOTH MANUAL AND BACKGROUND SYNCHRONIZATION •UNOBTRUSIVE •CONNECTION AVAILABILITY AND SYNC ARE VISUALLY LINKED

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

Slide 16: 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.

Slide 17: •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.

Slide 18: 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.

Slide 19: •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.

Slide 20: THE BASICS 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 Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 21: 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();

Slide 22: •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.

Slide 23: ABOUT PARAMETERS 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 Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 24: ABOUT RESULT PAGING •SQLStatement SUPPORTS PAGING •LIMITS NUMBER OF ROWS RETURNED var 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.

Slide 25: ABOUT TRANSACTIONS •MULTIPLE STATEMENTS (USING LOOPS) IN ONE WRITE OPERATION •ALLOWS ROLLBACKS ON ERROR var 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.

Slide 26: CONNECTION DETECTION in AIR. Is this thing on? Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 27: •NATIVE NativeApplication.nativeApplication.addEventListener( Event.NETWORK_CHANGE, onNetworkChange ); • ONLY DETECTS A CHANGE! •SERVICE MONITOR FRAMEWORK • URLMonitor var 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.

Slide 28: AS3 PROGRAMMING STRATEGIES A few tips to make your life easier. Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 29: 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 Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 30: 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 ) ); } }

Slide 31: USE “IF NOT EXISTS” •CREATE TABLES WHEN DB IS OPENED IF THEY DON’T EXIST var 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.

Slide 32: 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 Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 33: DEMO: Librarian Free sample code to be posted on voisen.org

Slide 34: USE SQLiteAdmin •USED TO HANDY TOOLS LIKE PHPMyAdmin? Try: http://coenraets.org/blog/2008/02/ sqlite-admin-for-air-10/ Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.

Slide 35: DEMO: SQLite Admin. By Christophe Coenraets.

Slide 36: 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.

Slide 37: QUESTIONS? Web: http://voisen.org E-mail: sean@voisen.org Sean Voisen 2008. Licensed under Creative Commons Attribution No-Derivatives 3.0 license.