SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Supersonic image recognition
for your mobile apps
Cédric @deltheil
Paris Tech Talks #6
Moodstocks
Tech co-founder
Mobile Image Recognition
Your Mobile App
Reference Images + ID-s
Image Recognition Platform
query
match ID = 1234
index
user
developer
ID = 1234
The old way: thin client
Mobile App
Image Recognition API
client
server
reference images
send JPEG image
via HTTP
match ID or nil
Drawback: network latencies!
Our approach: thick client
Mobile App
Moodstocks API
client
server
reference images
up to millions images
Moodstocks SDK
image signatures
up to 10k images
query match ID or nil
server-side search
for large DB
sync
Benefit: speed
a typical search runs in a few ms
Moodstocks SDK
Mobile App
Wrapper
Core Library
Objective-C
Java
C
Moodstocks SDK
Mobile App
Wrapper
Core Library
we will now focus
on this part
Design Goal #1
Portability
• core library written in C99
• +99% code in common between iOS / Android
• e.g supporting Intel CPU-s on Android was… no effort!
Design Goal #2
Efficiency
• in-memory data structures for maximum speed
• leverage NEON capabilities (SIMD) where applicable
• a typical search runs in ~ 30 ms / 10k images (iPhone 5S)
Design Goal #3
Low footprint
• 100% home made, lightweight implementation
• implement & embed only what we need!
• around 800 kB for the iOS ARMv7s release build (-Os)
in 1/2 day
Our choices pay off
Core Library Architecture
Public Header File
Internal Modules
3rd Party Libraries
Image
Recognition
Pipeline
Public Header File
Internal Modules
3rd Party Libraries
Image
Recognition
Pipeline
Image Recognition Pipeline
• full-stack: the whole recognition occurs on-device!
• robust to camera noises (blur, lighting, …)
• supports 1D and 2D barcodes too
Image Recognition Pipeline
Public Header File
Internal Modules
3rd Party Libraries
Image
Recognition
Pipeline
Internal Modules (1/4)
• master-slave sync engine for image signatures
• efficient: works with diff-s & data bundles (less requests)
• fail-safe: retries + the client always stays consistent
Sync StorageLogs API client
Internal Modules (2/4)
Sync StorageLogs API client
• collects search results & metadata (OS, etc) along time
• a long-running thread posts batches every 30s
• tolerant to network errors -> HTTP 409 (Already Exists)
Internal Modules (3/4)
• persists image signatures on-disk
• persists search results events on-disk
• used as a temp on-disk buffer at sync time
Sync StorageLogs API client
Internal Modules (4/4)
• used for server-side recognition (send image via HTTP)
• includes a pool to re-use connections
• also used to post logs batches to the server (HTTP)
Sync StorageLogs API client
Public Header File
Internal Modules
3rd Party Libraries
Image
Recognition
Pipeline
3rd Party Libraries (1/4)
libcurl Tokyo Cabinet jpec msgpack
• the +500M users file transfer library
• multi API -> multiple transfers in the same thread
• we use it as the backend of our sync engine + HTTP reqs.
3rd Party Libraries (2/4)
libcurl Tokyo Cabinet jpec msgpack
• key / value embedded database (hash / table / B+tree)
• … and also a fantastic C library (see tcutil.h)
• we use it as the backend of our storage engine
3rd Party Libraries (3/4)
libcurl Tokyo Cabinet jpec msgpack
• our home-made, tiny JPEG encoder (600 LOC-s)
• we open sourced it -> github.com/Moodstocks/jpec
• we use it for server-side requests (send image)
3rd Party Libraries (4/4)
libcurl Tokyo Cabinet jpec msgpack
• efficient binary serialization format
• we use it to pack the data we synchronize
Thanks!
Questions? Comments? cedric AT moodstocks DOT com | @deltheil
Building
• we use simple Makefile-s and shell scripts
• we cross-compile w/ the iOS and Android toolchains
• we combine all the arch-s into a fat static lib (armv7, …)
Testing
• we write unit tests with ct (Easy Unit Testing) by @krarick
• we run them on device! e.g jailbreaked iPhone + openssh
• we use a mock to test the sync engine
Quality
• no warnings: we compile with -Wall -Werror
• static analysis with Clang Static Analyzer
• memory leak checks with Valgrind

Más contenido relacionado

Destacado

Hpc Application List
Hpc Application ListHpc Application List
Hpc Application Listjstemler
 
The use of Spot imagery in support of crop area estimates in South Africa by ...
The use of Spot imagery in support of crop area estimates in South Africa by ...The use of Spot imagery in support of crop area estimates in South Africa by ...
The use of Spot imagery in support of crop area estimates in South Africa by ...Spot Image
 
Amazon Machine Learning im Einsatz: smartes Marketing - AWS Machine Learning...
Amazon Machine Learning im Einsatz: smartes Marketing  - AWS Machine Learning...Amazon Machine Learning im Einsatz: smartes Marketing  - AWS Machine Learning...
Amazon Machine Learning im Einsatz: smartes Marketing - AWS Machine Learning...AWS Germany
 
WebTomorrow - The marketer of the future in an algorithm driven world
WebTomorrow - The marketer of the future in an algorithm driven worldWebTomorrow - The marketer of the future in an algorithm driven world
WebTomorrow - The marketer of the future in an algorithm driven worldThe House of Marketing
 
Consumer Internet Insights - Jeyandran Venugopal
Consumer Internet Insights  - Jeyandran VenugopalConsumer Internet Insights  - Jeyandran Venugopal
Consumer Internet Insights - Jeyandran VenugopalLounge47
 
Machine Learning and Applications
Machine Learning and ApplicationsMachine Learning and Applications
Machine Learning and ApplicationsGeeta Arora
 
Predicting online user behaviour using deep learning algorithms
Predicting online user behaviour using deep learning algorithmsPredicting online user behaviour using deep learning algorithms
Predicting online user behaviour using deep learning algorithmsArmando Vieira
 
Machine learning for dummies - Azuges November 2016
Machine learning for dummies - Azuges November 2016Machine learning for dummies - Azuges November 2016
Machine learning for dummies - Azuges November 2016Carlos Landeras Martínez
 
Machine learning for dummies
Machine learning for dummiesMachine learning for dummies
Machine learning for dummiesAlexandre Uehara
 
Better ways of using Analytics in Agriculture in india
Better ways of using Analytics in Agriculture in indiaBetter ways of using Analytics in Agriculture in india
Better ways of using Analytics in Agriculture in indiaYagnesh Shetty
 
Faster R-CNN: Towards real-time object detection with region proposal network...
Faster R-CNN: Towards real-time object detection with region proposal network...Faster R-CNN: Towards real-time object detection with region proposal network...
Faster R-CNN: Towards real-time object detection with region proposal network...Universitat Politècnica de Catalunya
 
Predictive analytics in the agriculture industry
Predictive analytics in the agriculture industryPredictive analytics in the agriculture industry
Predictive analytics in the agriculture industryRefresh Annapolis Valley
 
Deep learning: the future of recommendations
Deep learning: the future of recommendationsDeep learning: the future of recommendations
Deep learning: the future of recommendationsBalázs Hidasi
 
NVIDIA CES 2016 Highlights
NVIDIA CES 2016 HighlightsNVIDIA CES 2016 Highlights
NVIDIA CES 2016 HighlightsNVIDIA
 

Destacado (17)

Hpc Application List
Hpc Application ListHpc Application List
Hpc Application List
 
The use of Spot imagery in support of crop area estimates in South Africa by ...
The use of Spot imagery in support of crop area estimates in South Africa by ...The use of Spot imagery in support of crop area estimates in South Africa by ...
The use of Spot imagery in support of crop area estimates in South Africa by ...
 
Smart farm initiative2
Smart farm initiative2Smart farm initiative2
Smart farm initiative2
 
Amazon Machine Learning im Einsatz: smartes Marketing - AWS Machine Learning...
Amazon Machine Learning im Einsatz: smartes Marketing  - AWS Machine Learning...Amazon Machine Learning im Einsatz: smartes Marketing  - AWS Machine Learning...
Amazon Machine Learning im Einsatz: smartes Marketing - AWS Machine Learning...
 
WebTomorrow - The marketer of the future in an algorithm driven world
WebTomorrow - The marketer of the future in an algorithm driven worldWebTomorrow - The marketer of the future in an algorithm driven world
WebTomorrow - The marketer of the future in an algorithm driven world
 
Consumer Internet Insights - Jeyandran Venugopal
Consumer Internet Insights  - Jeyandran VenugopalConsumer Internet Insights  - Jeyandran Venugopal
Consumer Internet Insights - Jeyandran Venugopal
 
Machine Learning and Applications
Machine Learning and ApplicationsMachine Learning and Applications
Machine Learning and Applications
 
Faster rcnn
Faster rcnnFaster rcnn
Faster rcnn
 
Predicting online user behaviour using deep learning algorithms
Predicting online user behaviour using deep learning algorithmsPredicting online user behaviour using deep learning algorithms
Predicting online user behaviour using deep learning algorithms
 
Machine learning for dummies - Azuges November 2016
Machine learning for dummies - Azuges November 2016Machine learning for dummies - Azuges November 2016
Machine learning for dummies - Azuges November 2016
 
Machine learning for dummies
Machine learning for dummiesMachine learning for dummies
Machine learning for dummies
 
Better ways of using Analytics in Agriculture in india
Better ways of using Analytics in Agriculture in indiaBetter ways of using Analytics in Agriculture in india
Better ways of using Analytics in Agriculture in india
 
Faster R-CNN: Towards real-time object detection with region proposal network...
Faster R-CNN: Towards real-time object detection with region proposal network...Faster R-CNN: Towards real-time object detection with region proposal network...
Faster R-CNN: Towards real-time object detection with region proposal network...
 
Predictive analytics in the agriculture industry
Predictive analytics in the agriculture industryPredictive analytics in the agriculture industry
Predictive analytics in the agriculture industry
 
Deep learning: the future of recommendations
Deep learning: the future of recommendationsDeep learning: the future of recommendations
Deep learning: the future of recommendations
 
Andrew Ng, Chief Scientist at Baidu
Andrew Ng, Chief Scientist at BaiduAndrew Ng, Chief Scientist at Baidu
Andrew Ng, Chief Scientist at Baidu
 
NVIDIA CES 2016 Highlights
NVIDIA CES 2016 HighlightsNVIDIA CES 2016 Highlights
NVIDIA CES 2016 Highlights
 

Último

Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 

Último (20)

Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 

Moodstocks - Mobile Image Recognition - Paris Tech Talks #6

  • 1. Supersonic image recognition for your mobile apps Cédric @deltheil Paris Tech Talks #6 Moodstocks Tech co-founder
  • 2. Mobile Image Recognition Your Mobile App Reference Images + ID-s Image Recognition Platform query match ID = 1234 index user developer ID = 1234
  • 3. The old way: thin client Mobile App Image Recognition API client server reference images send JPEG image via HTTP match ID or nil
  • 5. Our approach: thick client Mobile App Moodstocks API client server reference images up to millions images Moodstocks SDK image signatures up to 10k images query match ID or nil server-side search for large DB sync
  • 6. Benefit: speed a typical search runs in a few ms
  • 7. Moodstocks SDK Mobile App Wrapper Core Library Objective-C Java C
  • 8. Moodstocks SDK Mobile App Wrapper Core Library we will now focus on this part
  • 9. Design Goal #1 Portability • core library written in C99 • +99% code in common between iOS / Android • e.g supporting Intel CPU-s on Android was… no effort!
  • 10. Design Goal #2 Efficiency • in-memory data structures for maximum speed • leverage NEON capabilities (SIMD) where applicable • a typical search runs in ~ 30 ms / 10k images (iPhone 5S)
  • 11. Design Goal #3 Low footprint • 100% home made, lightweight implementation • implement & embed only what we need! • around 800 kB for the iOS ARMv7s release build (-Os)
  • 12. in 1/2 day Our choices pay off
  • 13. Core Library Architecture Public Header File Internal Modules 3rd Party Libraries Image Recognition Pipeline
  • 14. Public Header File Internal Modules 3rd Party Libraries Image Recognition Pipeline
  • 15. Image Recognition Pipeline • full-stack: the whole recognition occurs on-device! • robust to camera noises (blur, lighting, …) • supports 1D and 2D barcodes too Image Recognition Pipeline
  • 16. Public Header File Internal Modules 3rd Party Libraries Image Recognition Pipeline
  • 17. Internal Modules (1/4) • master-slave sync engine for image signatures • efficient: works with diff-s & data bundles (less requests) • fail-safe: retries + the client always stays consistent Sync StorageLogs API client
  • 18. Internal Modules (2/4) Sync StorageLogs API client • collects search results & metadata (OS, etc) along time • a long-running thread posts batches every 30s • tolerant to network errors -> HTTP 409 (Already Exists)
  • 19. Internal Modules (3/4) • persists image signatures on-disk • persists search results events on-disk • used as a temp on-disk buffer at sync time Sync StorageLogs API client
  • 20. Internal Modules (4/4) • used for server-side recognition (send image via HTTP) • includes a pool to re-use connections • also used to post logs batches to the server (HTTP) Sync StorageLogs API client
  • 21. Public Header File Internal Modules 3rd Party Libraries Image Recognition Pipeline
  • 22. 3rd Party Libraries (1/4) libcurl Tokyo Cabinet jpec msgpack • the +500M users file transfer library • multi API -> multiple transfers in the same thread • we use it as the backend of our sync engine + HTTP reqs.
  • 23. 3rd Party Libraries (2/4) libcurl Tokyo Cabinet jpec msgpack • key / value embedded database (hash / table / B+tree) • … and also a fantastic C library (see tcutil.h) • we use it as the backend of our storage engine
  • 24. 3rd Party Libraries (3/4) libcurl Tokyo Cabinet jpec msgpack • our home-made, tiny JPEG encoder (600 LOC-s) • we open sourced it -> github.com/Moodstocks/jpec • we use it for server-side requests (send image)
  • 25. 3rd Party Libraries (4/4) libcurl Tokyo Cabinet jpec msgpack • efficient binary serialization format • we use it to pack the data we synchronize
  • 26. Thanks! Questions? Comments? cedric AT moodstocks DOT com | @deltheil
  • 27. Building • we use simple Makefile-s and shell scripts • we cross-compile w/ the iOS and Android toolchains • we combine all the arch-s into a fat static lib (armv7, …)
  • 28. Testing • we write unit tests with ct (Easy Unit Testing) by @krarick • we run them on device! e.g jailbreaked iPhone + openssh • we use a mock to test the sync engine
  • 29. Quality • no warnings: we compile with -Wall -Werror • static analysis with Clang Static Analyzer • memory leak checks with Valgrind