SlideShare a Scribd company logo
1 of 19
2007: It all started with baby
photos...
Yes I could have just used FTP, but that would be too easy!
A Little About Me
● Freelance software developer
● Commercial vendor for Milton since 2012
● Lives in New Zealand
● No customers in my own country!
● Also have a startup business – FuseLMS.com
About Milton
● Started in 2007 as small webdav servlet
● Now best in the world at what it does – only
library to support webdav,caldav and carddav
● Corporate clients include: Google, HP, Novell
● EU firms: Lukkien, 5Point, QualityOnline,
Careweb, Idiada, SSP Europe
● FOSS projects: ExistDB, BaseX, CouchDB
● github.com/miltonio/milton2
About Webdav
● Network protocol, like FTP and Samba
● But extensible
● Its just HTTP, plus a few extras
● Supports structured data as well as binary
content
● Built in with all major Operating Systems
● Supported by most major apps, like MS Office,
Adobe, etc
Dav Protocols
HTTP 1.1
WebDav
ACL
CarddavCaldav
QuotaSearchSync
The Awesome-ness of Dav
● Scalability! Stateless protocols allow high
performance, high availability clusters
● Network integration: No hassles with firewalls,
its just http
● Security: Simple, well understood protocols
makes it easy for sys admins to secure
● Integration: Just incremental additions to
existing web applications, for close integration
Industry support
● Broad support from industry working groups,
ongoing protocol development
● Early leadership from Microsoft
● Then Apple led charge with MobileMe and
iCloud
● Google sees Dav as strategic to making its
calendar and contact services ubiquitous
Productivity Models
Model Where is my software? Where is my content? Exemplors
1 Local Local Microsoft
2 Remote Remote Google,
Facebook
3 Local Remote Apple
3b Local Local synced to Remote Dropbox
Webdav is useful when local applications need access to remote content
There is a war being waged between local software vendors (Apple,MS) and remote
software vendors (Google,Facebook).
Which model is winning?
How to build webdav apps?
Create annotated methods that work with your domain objects
@Root
public Repository getRoot() {
return findRootRepository();
}
@ChildrenOf
public List<DataNode> getRootFolders(Repository root) {
return root.getFolders();
}
@ChildrenOf
public List<DataNode> getRootFolders(DirectoryNode root) {
return root.getFolders();
}
@Get
public void getFileContent(FileNode fileNode, OutputStream out){
fileNode.writeContent(out);
}
@PutChild
public FileNode createFile(DirectoryNode dir, String newName, InputStream in) {
DataSession.FileNode newFileNode = parent.addFile(newName);
newFileNode.setContent(inputStream);
return newFileNode;
}
How to implement security?
Implement authentication and an access control list:
@Authenticate
public Boolean checkPasswordBasic(Profile user, String password) {
return passwordManager.verifyPassword(user, password);
}
@Authenticate
public Boolean checkPasswordDigest(Profile user, DigestResponse d) {
return passwordManager.verifyDigest(d, user);
}
@AccessControlList
public List<AccessControlledResource.Priviledge> getPrivs(target, Profile user) {
if( currentUser == null ) {
return AccessControlledResource.NONE;
} else {
… // business rules
}
}
Competitors to webdav for files
● Dropbox!! (and other sync apps)
● Most users prefer sync'd files to remote access
● Webdav-sync protocol exists, but not widely
implemented
● Ideally support both webdav and sync
● Milton has components to support sync
Caldav: Webdav for calendars
● Dav is well suited, given the mix of structured
data and unstructured content
● Probably most widely used Dav protocol
● Coming to Windows Phone 8, just announced
this week!
● So probably available on Window desktop in
near future
● Very well supported on Mac and iOS devices
How to build Caldav apps?
Start with a webdav app and add calendar capabilities
@ChildrenOf
public CalendarsHome getCalendarsHome(Profile user) {
return new CalendarsHome(user); // Place holder object
}
@ChildrenOf
@Calendars
public List<Calendar> getCalendars(CalendarsHome cals, @Principal Profile profile) {
return cals.user.getCalendars();
}
@Get
@ICalData
public void getEventIcal(CalEvent event, Calendar calendar, OutputStream out) {
String s = calendarService.getCalendar(event);
out.write(s.getBytes(StringUtils.UTF8));
}
}
@PutChild
public CalEvent createEvent(Calendar calendar, final String newName, InputStream in) {
CalEvent newEvent = calendarService.createEvent(calendar, newName, in);
return newEvent;
}
Carddav: for contacts
● Milton was deployed to Google Contacts end of
2012
● Google has deprecated ActiveSync, forcing iOS
users to move to Carddav – millions of users!
● No built in support for Thunderbird, but SOGO
connector is ok
● Very well supported on Mac and iOS devices
How to build Carddav apps?
You guessed it … easy!
@ChildrenOf
@AddressBooks
public MusicianAddressBook getAddressBook(AddressBooksHome m) {
...
}
@ContactData
@Get
public byte[] getContactData(MyContact c) {
...
}
Milton as a Web Framework
● Annotations support modelled on Spring MVC
● Templating, forms, ajax, data binding and xDav
work seamlessly in a single url namespace
● Automatically has navigable REST API –
includes properties!
● Eg:
@Post(bindData=true)
public Profile saveProfile(Profile profile) {
profile.setModifiedDate(new Date());
return profile;
}
@Get
public ModelAndView showUserPag(Profile p) {
return new ModelAndView("profile", p, "profPage");
}
What next for Webdav
● Expect wider adoption of Oauth2 by client and
server vendors
● Ubiquitous support for Caldav + Carddav for
service vendors and client vendors will be a
game changer
● Increasing support for webdav sync … ? Maybe
What next for Milton?
● Ongoing: co-ordination with client-side
developers to provide server-side capabilities
● Next protocols: webdav-sync + dav search
● File sync
● Server-to-server sync – eg sync OBM
calendars with Google calendars
● Server application development – simple
file,calendars and contacts server for small
business
What next for OBM and Milton?
● An ideal partnership
● First calendars...
● Then contacts...
● Then files … ? Hopefully!

More Related Content

What's hot

Python and Neo4j
Python and Neo4jPython and Neo4j
Python and Neo4jEric Lee
 
Getting started with Drupal 8
Getting started with Drupal 8Getting started with Drupal 8
Getting started with Drupal 8Hector Iribarne
 
CouchDB : More Couch
CouchDB : More CouchCouchDB : More Couch
CouchDB : More Couchdelagoya
 
FIWARE Wednesday Webinars - Introduction to NGSI-LD
FIWARE Wednesday Webinars - Introduction to NGSI-LDFIWARE Wednesday Webinars - Introduction to NGSI-LD
FIWARE Wednesday Webinars - Introduction to NGSI-LDFIWARE
 
Training Week: Build APIs with Neo4j GraphQL Library
Training Week: Build APIs with Neo4j GraphQL LibraryTraining Week: Build APIs with Neo4j GraphQL Library
Training Week: Build APIs with Neo4j GraphQL LibraryNeo4j
 
Data persistence using pouchdb and couchdb
Data persistence using pouchdb and couchdbData persistence using pouchdb and couchdb
Data persistence using pouchdb and couchdbDimgba Kalu
 
Database Migration using Oracle SQL Developer: DBA Stuff for the Non-DBA
Database Migration using Oracle SQL Developer: DBA Stuff for the Non-DBADatabase Migration using Oracle SQL Developer: DBA Stuff for the Non-DBA
Database Migration using Oracle SQL Developer: DBA Stuff for the Non-DBADanny Bryant
 
NoSQL: Why, When, and How
NoSQL: Why, When, and HowNoSQL: Why, When, and How
NoSQL: Why, When, and HowBigBlueHat
 

What's hot (9)

Python and Neo4j
Python and Neo4jPython and Neo4j
Python and Neo4j
 
Getting started with Drupal 8
Getting started with Drupal 8Getting started with Drupal 8
Getting started with Drupal 8
 
CouchDB : More Couch
CouchDB : More CouchCouchDB : More Couch
CouchDB : More Couch
 
FIWARE Wednesday Webinars - Introduction to NGSI-LD
FIWARE Wednesday Webinars - Introduction to NGSI-LDFIWARE Wednesday Webinars - Introduction to NGSI-LD
FIWARE Wednesday Webinars - Introduction to NGSI-LD
 
Training Week: Build APIs with Neo4j GraphQL Library
Training Week: Build APIs with Neo4j GraphQL LibraryTraining Week: Build APIs with Neo4j GraphQL Library
Training Week: Build APIs with Neo4j GraphQL Library
 
[iOS] Networking
[iOS] Networking[iOS] Networking
[iOS] Networking
 
Data persistence using pouchdb and couchdb
Data persistence using pouchdb and couchdbData persistence using pouchdb and couchdb
Data persistence using pouchdb and couchdb
 
Database Migration using Oracle SQL Developer: DBA Stuff for the Non-DBA
Database Migration using Oracle SQL Developer: DBA Stuff for the Non-DBADatabase Migration using Oracle SQL Developer: DBA Stuff for the Non-DBA
Database Migration using Oracle SQL Developer: DBA Stuff for the Non-DBA
 
NoSQL: Why, When, and How
NoSQL: Why, When, and HowNoSQL: Why, When, and How
NoSQL: Why, When, and How
 

Similar to Milton Webdav Presentation for Linagora

Serverless Computing with Google Cloud
Serverless Computing with Google CloudServerless Computing with Google Cloud
Serverless Computing with Google Cloudwesley chun
 
Drupal 8 and iOS - an Open Source App
Drupal 8 and iOS - an Open Source AppDrupal 8 and iOS - an Open Source App
Drupal 8 and iOS - an Open Source ApplittleMAS
 
Serverless computing with Google Cloud
Serverless computing with Google CloudServerless computing with Google Cloud
Serverless computing with Google Cloudwesley chun
 
Run your code serverlessly on Google's open cloud
Run your code serverlessly on Google's open cloudRun your code serverlessly on Google's open cloud
Run your code serverlessly on Google's open cloudwesley chun
 
IBM Connect 2014 - AD205: Creating State-of-the-Art Web Applications with Dom...
IBM Connect 2014 - AD205: Creating State-of-the-Art Web Applications with Dom...IBM Connect 2014 - AD205: Creating State-of-the-Art Web Applications with Dom...
IBM Connect 2014 - AD205: Creating State-of-the-Art Web Applications with Dom...Dave Delay
 
Android architecture components with cloud firestore
Android architecture components with cloud firestoreAndroid architecture components with cloud firestore
Android architecture components with cloud firestorePankaj Rai
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWTArnaud Tournier
 
Firestore MENA digital days : GDG Abu dhabi
Firestore MENA digital days : GDG Abu dhabiFirestore MENA digital days : GDG Abu dhabi
Firestore MENA digital days : GDG Abu dhabiShashank Kakroo
 
Powerful Google Cloud tools for your hack
Powerful Google Cloud tools for your hackPowerful Google Cloud tools for your hack
Powerful Google Cloud tools for your hackwesley chun
 
State of GeoServer 2.10
State of GeoServer 2.10State of GeoServer 2.10
State of GeoServer 2.10Jody Garnett
 
Eat whatever you can with PyBabe
Eat whatever you can with PyBabeEat whatever you can with PyBabe
Eat whatever you can with PyBabeDataiku
 
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud RunDesigning flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Runwesley chun
 
Rapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWTRapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWTManuel Carrasco Moñino
 
RedisConf18 - Writing modular & encapsulated Redis code
RedisConf18 - Writing modular & encapsulated Redis codeRedisConf18 - Writing modular & encapsulated Redis code
RedisConf18 - Writing modular & encapsulated Redis codeRedis Labs
 
Javascript as a target language - GWT kickoff - part1/2
Javascript as a target language - GWT kickoff - part1/2Javascript as a target language - GWT kickoff - part1/2
Javascript as a target language - GWT kickoff - part1/2JooinK
 
Introducing the R2DBC async Java connector
Introducing the R2DBC async Java connectorIntroducing the R2DBC async Java connector
Introducing the R2DBC async Java connectorMariaDB plc
 

Similar to Milton Webdav Presentation for Linagora (20)

Serverless Computing with Google Cloud
Serverless Computing with Google CloudServerless Computing with Google Cloud
Serverless Computing with Google Cloud
 
Drupal 8 and iOS - an Open Source App
Drupal 8 and iOS - an Open Source AppDrupal 8 and iOS - an Open Source App
Drupal 8 and iOS - an Open Source App
 
Serverless computing with Google Cloud
Serverless computing with Google CloudServerless computing with Google Cloud
Serverless computing with Google Cloud
 
Run your code serverlessly on Google's open cloud
Run your code serverlessly on Google's open cloudRun your code serverlessly on Google's open cloud
Run your code serverlessly on Google's open cloud
 
IBM Connect 2014 - AD205: Creating State-of-the-Art Web Applications with Dom...
IBM Connect 2014 - AD205: Creating State-of-the-Art Web Applications with Dom...IBM Connect 2014 - AD205: Creating State-of-the-Art Web Applications with Dom...
IBM Connect 2014 - AD205: Creating State-of-the-Art Web Applications with Dom...
 
Android architecture components with cloud firestore
Android architecture components with cloud firestoreAndroid architecture components with cloud firestore
Android architecture components with cloud firestore
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWT
 
Spring.io
Spring.ioSpring.io
Spring.io
 
Android data binding
Android data bindingAndroid data binding
Android data binding
 
Firestore MENA digital days : GDG Abu dhabi
Firestore MENA digital days : GDG Abu dhabiFirestore MENA digital days : GDG Abu dhabi
Firestore MENA digital days : GDG Abu dhabi
 
Midao JDBC presentation
Midao JDBC presentationMidao JDBC presentation
Midao JDBC presentation
 
Powerful Google Cloud tools for your hack
Powerful Google Cloud tools for your hackPowerful Google Cloud tools for your hack
Powerful Google Cloud tools for your hack
 
State of GeoServer 2.10
State of GeoServer 2.10State of GeoServer 2.10
State of GeoServer 2.10
 
Eat whatever you can with PyBabe
Eat whatever you can with PyBabeEat whatever you can with PyBabe
Eat whatever you can with PyBabe
 
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud RunDesigning flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
Designing flexible apps deployable to App Engine, Cloud Functions, or Cloud Run
 
Mukul-Resume
Mukul-ResumeMukul-Resume
Mukul-Resume
 
Rapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWTRapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWT
 
RedisConf18 - Writing modular & encapsulated Redis code
RedisConf18 - Writing modular & encapsulated Redis codeRedisConf18 - Writing modular & encapsulated Redis code
RedisConf18 - Writing modular & encapsulated Redis code
 
Javascript as a target language - GWT kickoff - part1/2
Javascript as a target language - GWT kickoff - part1/2Javascript as a target language - GWT kickoff - part1/2
Javascript as a target language - GWT kickoff - part1/2
 
Introducing the R2DBC async Java connector
Introducing the R2DBC async Java connectorIntroducing the R2DBC async Java connector
Introducing the R2DBC async Java connector
 

Recently uploaded

Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Recently uploaded (20)

Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 

Milton Webdav Presentation for Linagora

  • 1. 2007: It all started with baby photos... Yes I could have just used FTP, but that would be too easy!
  • 2. A Little About Me ● Freelance software developer ● Commercial vendor for Milton since 2012 ● Lives in New Zealand ● No customers in my own country! ● Also have a startup business – FuseLMS.com
  • 3. About Milton ● Started in 2007 as small webdav servlet ● Now best in the world at what it does – only library to support webdav,caldav and carddav ● Corporate clients include: Google, HP, Novell ● EU firms: Lukkien, 5Point, QualityOnline, Careweb, Idiada, SSP Europe ● FOSS projects: ExistDB, BaseX, CouchDB ● github.com/miltonio/milton2
  • 4. About Webdav ● Network protocol, like FTP and Samba ● But extensible ● Its just HTTP, plus a few extras ● Supports structured data as well as binary content ● Built in with all major Operating Systems ● Supported by most major apps, like MS Office, Adobe, etc
  • 6. The Awesome-ness of Dav ● Scalability! Stateless protocols allow high performance, high availability clusters ● Network integration: No hassles with firewalls, its just http ● Security: Simple, well understood protocols makes it easy for sys admins to secure ● Integration: Just incremental additions to existing web applications, for close integration
  • 7. Industry support ● Broad support from industry working groups, ongoing protocol development ● Early leadership from Microsoft ● Then Apple led charge with MobileMe and iCloud ● Google sees Dav as strategic to making its calendar and contact services ubiquitous
  • 8. Productivity Models Model Where is my software? Where is my content? Exemplors 1 Local Local Microsoft 2 Remote Remote Google, Facebook 3 Local Remote Apple 3b Local Local synced to Remote Dropbox Webdav is useful when local applications need access to remote content There is a war being waged between local software vendors (Apple,MS) and remote software vendors (Google,Facebook). Which model is winning?
  • 9. How to build webdav apps? Create annotated methods that work with your domain objects @Root public Repository getRoot() { return findRootRepository(); } @ChildrenOf public List<DataNode> getRootFolders(Repository root) { return root.getFolders(); } @ChildrenOf public List<DataNode> getRootFolders(DirectoryNode root) { return root.getFolders(); } @Get public void getFileContent(FileNode fileNode, OutputStream out){ fileNode.writeContent(out); } @PutChild public FileNode createFile(DirectoryNode dir, String newName, InputStream in) { DataSession.FileNode newFileNode = parent.addFile(newName); newFileNode.setContent(inputStream); return newFileNode; }
  • 10. How to implement security? Implement authentication and an access control list: @Authenticate public Boolean checkPasswordBasic(Profile user, String password) { return passwordManager.verifyPassword(user, password); } @Authenticate public Boolean checkPasswordDigest(Profile user, DigestResponse d) { return passwordManager.verifyDigest(d, user); } @AccessControlList public List<AccessControlledResource.Priviledge> getPrivs(target, Profile user) { if( currentUser == null ) { return AccessControlledResource.NONE; } else { … // business rules } }
  • 11. Competitors to webdav for files ● Dropbox!! (and other sync apps) ● Most users prefer sync'd files to remote access ● Webdav-sync protocol exists, but not widely implemented ● Ideally support both webdav and sync ● Milton has components to support sync
  • 12. Caldav: Webdav for calendars ● Dav is well suited, given the mix of structured data and unstructured content ● Probably most widely used Dav protocol ● Coming to Windows Phone 8, just announced this week! ● So probably available on Window desktop in near future ● Very well supported on Mac and iOS devices
  • 13. How to build Caldav apps? Start with a webdav app and add calendar capabilities @ChildrenOf public CalendarsHome getCalendarsHome(Profile user) { return new CalendarsHome(user); // Place holder object } @ChildrenOf @Calendars public List<Calendar> getCalendars(CalendarsHome cals, @Principal Profile profile) { return cals.user.getCalendars(); } @Get @ICalData public void getEventIcal(CalEvent event, Calendar calendar, OutputStream out) { String s = calendarService.getCalendar(event); out.write(s.getBytes(StringUtils.UTF8)); } } @PutChild public CalEvent createEvent(Calendar calendar, final String newName, InputStream in) { CalEvent newEvent = calendarService.createEvent(calendar, newName, in); return newEvent; }
  • 14. Carddav: for contacts ● Milton was deployed to Google Contacts end of 2012 ● Google has deprecated ActiveSync, forcing iOS users to move to Carddav – millions of users! ● No built in support for Thunderbird, but SOGO connector is ok ● Very well supported on Mac and iOS devices
  • 15. How to build Carddav apps? You guessed it … easy! @ChildrenOf @AddressBooks public MusicianAddressBook getAddressBook(AddressBooksHome m) { ... } @ContactData @Get public byte[] getContactData(MyContact c) { ... }
  • 16. Milton as a Web Framework ● Annotations support modelled on Spring MVC ● Templating, forms, ajax, data binding and xDav work seamlessly in a single url namespace ● Automatically has navigable REST API – includes properties! ● Eg: @Post(bindData=true) public Profile saveProfile(Profile profile) { profile.setModifiedDate(new Date()); return profile; } @Get public ModelAndView showUserPag(Profile p) { return new ModelAndView("profile", p, "profPage"); }
  • 17. What next for Webdav ● Expect wider adoption of Oauth2 by client and server vendors ● Ubiquitous support for Caldav + Carddav for service vendors and client vendors will be a game changer ● Increasing support for webdav sync … ? Maybe
  • 18. What next for Milton? ● Ongoing: co-ordination with client-side developers to provide server-side capabilities ● Next protocols: webdav-sync + dav search ● File sync ● Server-to-server sync – eg sync OBM calendars with Google calendars ● Server application development – simple file,calendars and contacts server for small business
  • 19. What next for OBM and Milton? ● An ideal partnership ● First calendars... ● Then contacts... ● Then files … ? Hopefully!