+ All Categories
Home > Documents > Evernote Reaktor Helsinki 2013

Evernote Reaktor Helsinki 2013

Date post: 02-Jun-2018
Category:
Upload: -
View: 224 times
Download: 0 times
Share this document with a friend

of 73

Transcript
  • 8/10/2019 Evernote Reaktor Helsinki 2013

    1/73

    Hacking with the Evernote API for fun and profit

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    2/73

    What will Damian talk about?

    What is Evernote? How do people use it?

    Evernote Service API fundamentals

    Samsung Galaxy Gear watch integration

    Full Sync clients how I got hired by Evernote

    Taking advantage of Evernotes OCR

    Web Based integration

    Whats next?

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    3/73

    What is Evernote?

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    4/73

    Evernote is a note taking app

    Capture anything (text, photos, audio clips)

    Capture anywhere

    Syncs to all your devices

    Access anywhere

    Find stuff quickly

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    5/73

    Evernote is a set of apps

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    6/73

    Evernote is a service

    Evernote Service

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    7/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    8/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    9/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    10/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    11/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    12/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    13/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    14/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    15/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    16/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    17/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    18/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    19/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    20/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    21/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    22/73

    How do I use the Evernote Service API?

    Evernote Service

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    23/73

    Apache Thrift

    Define platform independent Interface Definition

    Language

    Generate proxies for many languages

    Proxies combine with runtime to provide API

    So API Together: Evernote and Thrift

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    24/73

    Thrift examples

    struct Note {

    1: optional Guidguid,

    2: optional string title,3: optional string content,

    4: optional binary contentHash,

    5: optional i32 contentLength,

    6: optional Timestamp created,

    7: optional Timestamp updated,

    8: optional Timestamp deleted,

    9: optional bool active,10: optional i32 updateSequenceNum,

    11: optional string notebookGuid,

    12: optional list tagGuids,

    13: optional list resources,

    14: optional NoteAttributesattributes,

    15: optional list tagNames

    }

    Types.Note createNote(1: string authenticatio

    2: Types.Note note)

    throws (1: Errors.EDAMUserException use2: Errors.EDAMSystemException syst

    3: Errors.EDAMNotFoundException no

    JavaScript

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    25/73

    JavaScript

    iOS

    Android

    Java

    C Sharp Python

    Mac

    PHP

    Ruby

    Perl

    C++

    PhoneGap

    ActionScript

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    26/73

    My top 10 mistakes: 1

    On mobile devices, trying to download and create large notes

    images) using the standard Thrift calls

    Run out of memory very quickly

    Use Thrift library to stream content

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    27/73

    ENML Evernote Markup Language

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    28/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    29/73

    htt // db t /

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    30/73

    https://sandbox.evernote.com/

    Play here without risking hurting yourself or others

    Replica of production environment

    API K

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    31/73

    API Keys

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    32/73

    Authentication

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    33/73

    Authentication

    Username & Password

    Optional Two Factor Authentication

    Authenticate using OAUTH

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    34/73

    Developer Tokens

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    35/73

    Developer Tokens

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    36/73

    My top 10 mistakes: 2

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    37/73

    My top 10 mistakes: 2

    SSL and other Auth exceptions caused by clock being set inco

    Demo Client

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    38/73

    Demo Client

    My top 10 mistakes: 3

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    39/73

    My top 10 mistakes: 3

    Create a note, then use the original note, not the returned no

    A simpler way

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    40/73

    A simpler way

    Local Evernote APIs

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    41/73

    Local Evernote APIs

    Mac : AppleScript

    Windows : ENScript scripting interface Android

    Standard inter-app communication mechanisms

    Send Android Intents to other apps

    Create

    Search

    Update

    ..

    Expose content using Content providers

    Demo: Using Android Intents

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    42/73

    Demo: Using Android Intents

    Using the Service API: what kind of client?

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    43/73

    Using the Service API: what kind of client?

    Ploze: a full sync client

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    44/73

    y

    Full sync client

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    45/73

    y

    Well defined and documented approach

    Each object has an UpdateSequenceNumber set by the Server Incremental synchronization

    NoteStore. getFilteredSyncChunk(string authenticationToken,

    i32 afterUSN,

    i32 maxEntries,

    SyncChunkFilter filter)

    Supports Concurrent clients

    http://dev.evernote.com/media/pdf/edam-sync.pdf

    My top 10 mistakes: 4

    http://dev.evernote.com/media/pdf/edam-sync.pdfhttp://dev.evernote.com/media/pdf/edam-sync.pdfhttp://dev.evernote.com/media/pdf/edam-sync.pdf
  • 8/10/2019 Evernote Reaktor Helsinki 2013

    46/73

    y p

    Using Evernote Guids as primary keys in local database

    Better to use int ids

    Messy for new (unsynced) notes.

    Client-allocated Guid until synced.

    Primary key then changes when server allocates Guid for note

    Thin (non-full sync) clients

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    47/73

    ( y )

    Save items to Evernote

    Add value to users

    Analyze content

    Help organize

    Process notes

    Generate insights

    Evernotes text recognition capabilities are interesting

    Creating Notes with images

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    48/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    49/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    50/73

    var recoXml = noteStoreClient.getResourceRecognition(AuthToken, resourc

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    51/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    52/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    53/73

    Auto-title notes?

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    54/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    55/73

    http://damianblog.com/2012/10/28/autotitle-evernote-from-im

    Web based clients

    http://damianblog.com/2012/10/28/autotitle-evernote-from-images/http://damianblog.com/2012/10/28/autotitle-evernote-from-images/http://damianblog.com/2012/10/28/autotitle-evernote-from-images/
  • 8/10/2019 Evernote Reaktor Helsinki 2013

    56/73

    Evernote V5 supports Reminders on Notes

    Popup within Evernote when reminder time reached

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    57/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    58/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    59/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    60/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    61/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    62/73

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    63/73

    Polling is yucky

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    64/73

    Evernote supports Web Hooks

    Specify a URL to be invoked when user creates or updates a note

    Supplies User info and Note Guid

    Optional filter

    I can request to be only notified when reminder notes are created/updated

    Use web hooks to trigger update of Google Calendar

    My top 10 mistakes: 6

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    65/73

    Assuming I am a typical user

    Test thousands of notes

    Massive notes

    No Tags, Lots of Tags

    No Notebooks, Lots of Notebooks

    Test extremes

    My top 10 mistakes: 7

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    66/73

    Not using API Regexes to validate names

    My top 10 mistakes: 8

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    67/73

    Not making use of existing examples

    https://github.com/evernote/

    My top 10 mistakes: 9

    https://github.com/evernote/https://github.com/evernote/https://github.com/evernote/
  • 8/10/2019 Evernote Reaktor Helsinki 2013

    68/73

    Struggling alone through issues

    http://discussion.evernote.com/forum/61-evernote-for-deve

    My top 10 mistakes: 10

    http://discussion.evernote.com/forum/61-evernote-for-developers/http://discussion.evernote.com/forum/61-evernote-for-developers/http://discussion.evernote.com/forum/61-evernote-for-developers/
  • 8/10/2019 Evernote Reaktor Helsinki 2013

    69/73

    Blank screen for new users of Windows Phone client on cellu

    networks

    Whats next?

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    70/73

    Get an API Key

    Create an account on the Sandbox

    Generate an auth token

    Explore Github examples

    Scratch that itch

    Evernote App Center

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    71/73

    Recap

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    72/73

    What is Evernote, and how do people use it?

    Evernote Service API fundamentals Galaxy Gear integration approach

    Full Sync client essentials

    Taking advantage of Evernotes OCR

    Web Based integration

    Whats next?

    Questions?

  • 8/10/2019 Evernote Reaktor Helsinki 2013

    73/73

    [email protected]

    @DamianMehers

    http://about.me/dmehers/

    mailto:[email protected]:[email protected]:[email protected]

Recommended