SlideShare a Scribd company logo
Funambol C++ APIs
Overview Looking backward Current status Looking forward Testing the APIs Q&A
Once upon a time Looking backward (1) Funambol needed a client to show its server technology and a Java prototype has born Supporting Windows platforms required clients for Outlook written in C++ The clients have been built on top of a common set of API, to share the protocol implementation.
The API portability Looking backward (2) The API had been designed to be portable since  the  beginning. Client Sync APIs OS and native data access
The unexpected along the way Looking backward (3) ... and along came the idea to sync emails and to push them ... and along came (and fortunately went away) Palm OS ... and along came SyncEvolution and the Posix support ... and along came the iPhone and the Mac ... and along came Symbian
Bottom line.... Looking backward (4) The original design did not accommodate all what was added along the way Each platform/feature introduced new constrains  If you see something strange in the APIs don't worry. Everything made sense at some point in time :)
Funambol C++ APIs overview  Current Status (1) Funambol C++ APIs  DS engine (to synchronize data) DM partial support (just the storage tree) Push technology (to receive push notifications) Supported platforms Windows and Windows mobile Posix (but mostly Linux) iPhone and Mac Symbian (>= 9.1)
The how and the what Current status (2) The Sync Engine is data agnostic, any data can be transported/synchronized (the how) Each client provides access to data, relying on its knowledge of the data and of the underlying system (the what)
The how (1) Current status (3) SyncML Server   (choose your favorite open source one) Sync Engine Sync Source Back End
The how (2) Current status (4) Sync Engine Sync Source Server Authentication OK What changed? Changes Client changes Server changes .. Black magic. . Apply changes Result Result
The what Current status (5) Typical data exchanged during synchronization Contacts Events/Tasks Notes Emails Files
Push service Current status (6) Server to client push is implemented by an API module Heartbeat Notifications Notifications Push Server Client Push module
Portability Current status (7) Different patterns for portability One interface, different implementations ifdefs in the code Object factories We do a case by case choice based on what makes more sense
Next easy steps Looking forward (1) Better modularization no monolithic API but components that can be enabled/disabled improved platform abstraction layer New components Updater to check for new versions
Next steps (longer term) Looking forward (2) Data model pushed into the API There is no common model for most PIM data today.  Use of standard containers STL? QT? Wrapping around them? Unified build system Cmake could be one solution. Improved large object support We need an option to avoid assembling/disassembling LO in memory
Data model into the API Looking forward (3) PIMItem ContactItem EventItem TaskItem Standard format parsers and formatters PIMSyncSource BackEnd Interface (client code)
Use of standard containers Looking forward (4) STL would be perfect if it were available on Symbian :( QT would be perfect if it were available on iPhone :( What about the wrapping route?
The wrapping route Looking forward (5) With STL support With QT support And if no good containers are available, we can revert to the ones we have today (safety net) Template <T> Funambol::list<T> { std::list<T> stlList; void append(<T> item) { stlList.append(item); } } Template <T> Funambol::list<T> { QList<T> qtList; append(<T> item) { qtList.append(item); } }
One drawback of portability Testing the API (1) One code base, multiple platforms change here, you break there! You cannot test all the platforms... We test on the platform we are developing for and... rely on automatic tests for other platforms rely on different levels of testing
Testing frameworks Testing the API (2) Unit testing we are still learning the approach.. design interface, write the test, code we have a large code base without tests it is painful to make it testable
Unit testing on existing code Testing the API (3) Adding test code is tedious, but sometimes also very hard How do we test big methods that (for example) require communications with the server? How do we test classes with a very simple public interface but a lot of private code? If someone has experiences to report....
Integration tests Testing the API (4) Require a sync source and possibly a server The APIs provide a File Sync source that can be used for this Complex tests simulating synchronization are part of the API testing framework. It would be nice to have a higher definition language to specify a test.
Our continuum environment Testing the API (5) We build the API every night as part of our continuum environment We build all different variants We run tests on windows and linux On linux we use valgrind to automatically report memory leaks
How to contribute There are several ways to contribute help us to extend the APIs use the APIs in your own client port the APIs to any platform help us to make the APIs more unit testable
The End (Q&A?)

More Related Content

PPTX
A Tour of EF Core's (1.1) Most Interesting & Important Features
PPT
Intro dotnet
PPTX
EF6 or EF Core? How Do I Choose?
PPT
Nice performance using Sf2 cache wrapping Sf1 application - Paris
PDF
The Python in the Apple
PPTX
Symfony 3.4
PPTX
Massif - the love child of Matlab Simulink and Eclipse
A Tour of EF Core's (1.1) Most Interesting & Important Features
Intro dotnet
EF6 or EF Core? How Do I Choose?
Nice performance using Sf2 cache wrapping Sf1 application - Paris
The Python in the Apple
Symfony 3.4
Massif - the love child of Matlab Simulink and Eclipse

What's hot (16)

PPT
LINQ in Visual Studio 2008
PPTX
Overview of microsoft dot net platforms
PPT
.Net overview
PPTX
Programming
PPT
Building scalable and language independent java services using apache thrift
PPTX
.NET and C# Introduction
PPTX
Object oriented programming 7 first steps in oop using c++
PPTX
.NET Standard - Introduction
PPTX
.Net Standard 2.0
PPTX
Net serialization
PPT
[CLPE] Novidades do .net Framework 4.0
PPT
Presentation for soap ui
PPT
Smoothing Your Java with DSLs
PPTX
Introduction to .NET Programming
PDF
LINQ in Visual Studio 2008
Overview of microsoft dot net platforms
.Net overview
Programming
Building scalable and language independent java services using apache thrift
.NET and C# Introduction
Object oriented programming 7 first steps in oop using c++
.NET Standard - Introduction
.Net Standard 2.0
Net serialization
[CLPE] Novidades do .net Framework 4.0
Presentation for soap ui
Smoothing Your Java with DSLs
Introduction to .NET Programming
Ad

Similar to Funambol C++ API (20)

PDF
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
PDF
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
PPTX
Locust automated api_load_test_framework_development
PDF
Introduction to Apache Camel
PDF
Near real-time anomaly detection at Lyft
PPT
API Façade Pattern
PDF
Introduction to Apache Camel.pdf
PPTX
Splunk Conf 2014 - Getting the message
PDF
Building and deploying LLM applications with Apache Airflow
PPTX
TiConf EU 2014
PDF
Evolving the Network Automation Journey from Python to Platforms
PPT
soap toolkit
PPT
Building scalable and language-independent Java services using Apache Thrift ...
PDF
AI/ML Infra Meetup | How Uber Optimizes LLM Training and Finetune
PPT
What is [Open] MPI?
PPT
Mainframe Architecture & Product Overview
PPTX
.NET 4 Demystified - Sandeep Joshi
PPTX
Why apache Flink is the 4G of Big Data Analytics Frameworks
PDF
COMMitMDE'18: Eclipse Hawk: model repository querying as a service
PPTX
apidays Paris 2024 - Design, Debug, Test and Mock APIs with Kong Insomnia, Pi...
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
Multiplatform shared codebase with Kotlin/Native - UA Mobile 2019
Locust automated api_load_test_framework_development
Introduction to Apache Camel
Near real-time anomaly detection at Lyft
API Façade Pattern
Introduction to Apache Camel.pdf
Splunk Conf 2014 - Getting the message
Building and deploying LLM applications with Apache Airflow
TiConf EU 2014
Evolving the Network Automation Journey from Python to Platforms
soap toolkit
Building scalable and language-independent Java services using Apache Thrift ...
AI/ML Infra Meetup | How Uber Optimizes LLM Training and Finetune
What is [Open] MPI?
Mainframe Architecture & Product Overview
.NET 4 Demystified - Sandeep Joshi
Why apache Flink is the 4G of Big Data Analytics Frameworks
COMMitMDE'18: Eclipse Hawk: model repository querying as a service
apidays Paris 2024 - Design, Debug, Test and Mock APIs with Kong Insomnia, Pi...
Ad

More from Funambol (8)

ODP
Funambol Automated Tests for SyncML Clients
PDF
Contributing to OSS in a commercial non-OSS environment
PDF
Sugar and Spice - linking SugarCRM with Funambol
PPT
Syncevolution: Open Source and Funambol
ODP
Funabol Connector Development Roadmap
ODP
Funambol Java Clients Development: The Blackberry Case
ODP
Funambol Server Architecture
ODP
Funambol Community Programs
Funambol Automated Tests for SyncML Clients
Contributing to OSS in a commercial non-OSS environment
Sugar and Spice - linking SugarCRM with Funambol
Syncevolution: Open Source and Funambol
Funabol Connector Development Roadmap
Funambol Java Clients Development: The Blackberry Case
Funambol Server Architecture
Funambol Community Programs

Recently uploaded (20)

PDF
SOIL: Factor, Horizon, Process, Classification, Degradation, Conservation
PPTX
Onco Emergencies - Spinal cord compression Superior vena cava syndrome Febr...
PDF
LNK 2025 (2).pdf MWEHEHEHEHEHEHEHEHEHEHE
PDF
Complications of Minimal Access Surgery at WLH
PDF
LDMMIA Reiki Yoga Finals Review Spring Summer
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
Paper A Mock Exam 9_ Attempt review.pdf.
PPTX
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
PDF
Weekly quiz Compilation Jan -July 25.pdf
PDF
medical_surgical_nursing_10th_edition_ignatavicius_TEST_BANK_pdf.pdf
PPTX
Cell Types and Its function , kingdom of life
PDF
advance database management system book.pdf
PDF
Indian roads congress 037 - 2012 Flexible pavement
PDF
Hazard Identification & Risk Assessment .pdf
PDF
RMMM.pdf make it easy to upload and study
PPTX
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
PDF
Supply Chain Operations Speaking Notes -ICLT Program
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PPTX
Digestion and Absorption of Carbohydrates, Proteina and Fats
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
SOIL: Factor, Horizon, Process, Classification, Degradation, Conservation
Onco Emergencies - Spinal cord compression Superior vena cava syndrome Febr...
LNK 2025 (2).pdf MWEHEHEHEHEHEHEHEHEHEHE
Complications of Minimal Access Surgery at WLH
LDMMIA Reiki Yoga Finals Review Spring Summer
Final Presentation General Medicine 03-08-2024.pptx
Paper A Mock Exam 9_ Attempt review.pdf.
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
Weekly quiz Compilation Jan -July 25.pdf
medical_surgical_nursing_10th_edition_ignatavicius_TEST_BANK_pdf.pdf
Cell Types and Its function , kingdom of life
advance database management system book.pdf
Indian roads congress 037 - 2012 Flexible pavement
Hazard Identification & Risk Assessment .pdf
RMMM.pdf make it easy to upload and study
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
Supply Chain Operations Speaking Notes -ICLT Program
Final Presentation General Medicine 03-08-2024.pptx
Digestion and Absorption of Carbohydrates, Proteina and Fats
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape

Funambol C++ API

  • 2. Overview Looking backward Current status Looking forward Testing the APIs Q&A
  • 3. Once upon a time Looking backward (1) Funambol needed a client to show its server technology and a Java prototype has born Supporting Windows platforms required clients for Outlook written in C++ The clients have been built on top of a common set of API, to share the protocol implementation.
  • 4. The API portability Looking backward (2) The API had been designed to be portable since the beginning. Client Sync APIs OS and native data access
  • 5. The unexpected along the way Looking backward (3) ... and along came the idea to sync emails and to push them ... and along came (and fortunately went away) Palm OS ... and along came SyncEvolution and the Posix support ... and along came the iPhone and the Mac ... and along came Symbian
  • 6. Bottom line.... Looking backward (4) The original design did not accommodate all what was added along the way Each platform/feature introduced new constrains If you see something strange in the APIs don't worry. Everything made sense at some point in time :)
  • 7. Funambol C++ APIs overview Current Status (1) Funambol C++ APIs DS engine (to synchronize data) DM partial support (just the storage tree) Push technology (to receive push notifications) Supported platforms Windows and Windows mobile Posix (but mostly Linux) iPhone and Mac Symbian (>= 9.1)
  • 8. The how and the what Current status (2) The Sync Engine is data agnostic, any data can be transported/synchronized (the how) Each client provides access to data, relying on its knowledge of the data and of the underlying system (the what)
  • 9. The how (1) Current status (3) SyncML Server (choose your favorite open source one) Sync Engine Sync Source Back End
  • 10. The how (2) Current status (4) Sync Engine Sync Source Server Authentication OK What changed? Changes Client changes Server changes .. Black magic. . Apply changes Result Result
  • 11. The what Current status (5) Typical data exchanged during synchronization Contacts Events/Tasks Notes Emails Files
  • 12. Push service Current status (6) Server to client push is implemented by an API module Heartbeat Notifications Notifications Push Server Client Push module
  • 13. Portability Current status (7) Different patterns for portability One interface, different implementations ifdefs in the code Object factories We do a case by case choice based on what makes more sense
  • 14. Next easy steps Looking forward (1) Better modularization no monolithic API but components that can be enabled/disabled improved platform abstraction layer New components Updater to check for new versions
  • 15. Next steps (longer term) Looking forward (2) Data model pushed into the API There is no common model for most PIM data today. Use of standard containers STL? QT? Wrapping around them? Unified build system Cmake could be one solution. Improved large object support We need an option to avoid assembling/disassembling LO in memory
  • 16. Data model into the API Looking forward (3) PIMItem ContactItem EventItem TaskItem Standard format parsers and formatters PIMSyncSource BackEnd Interface (client code)
  • 17. Use of standard containers Looking forward (4) STL would be perfect if it were available on Symbian :( QT would be perfect if it were available on iPhone :( What about the wrapping route?
  • 18. The wrapping route Looking forward (5) With STL support With QT support And if no good containers are available, we can revert to the ones we have today (safety net) Template <T> Funambol::list<T> { std::list<T> stlList; void append(<T> item) { stlList.append(item); } } Template <T> Funambol::list<T> { QList<T> qtList; append(<T> item) { qtList.append(item); } }
  • 19. One drawback of portability Testing the API (1) One code base, multiple platforms change here, you break there! You cannot test all the platforms... We test on the platform we are developing for and... rely on automatic tests for other platforms rely on different levels of testing
  • 20. Testing frameworks Testing the API (2) Unit testing we are still learning the approach.. design interface, write the test, code we have a large code base without tests it is painful to make it testable
  • 21. Unit testing on existing code Testing the API (3) Adding test code is tedious, but sometimes also very hard How do we test big methods that (for example) require communications with the server? How do we test classes with a very simple public interface but a lot of private code? If someone has experiences to report....
  • 22. Integration tests Testing the API (4) Require a sync source and possibly a server The APIs provide a File Sync source that can be used for this Complex tests simulating synchronization are part of the API testing framework. It would be nice to have a higher definition language to specify a test.
  • 23. Our continuum environment Testing the API (5) We build the API every night as part of our continuum environment We build all different variants We run tests on windows and linux On linux we use valgrind to automatically report memory leaks
  • 24. How to contribute There are several ways to contribute help us to extend the APIs use the APIs in your own client port the APIs to any platform help us to make the APIs more unit testable