SlideShare a Scribd company logo
1 of 62
Download to read offline
Introducing
Pebble SDK 2.0
November 6th 2013
A MAJOR UPDATE

New Tools

SDK Overhaul

New APIs
Introducing Pebble SDK 2.0

If you are watching live, you can ask questions
On our IRC channel: #pebble on irc.freenode.net
During our AMA on Reddit at 12pm PST today
This is recorded and will be available on our YouTube channel and on
the developer web site
Friendly warning: This presentation is mostly intended for developers
New Tools

Improving the developer experience
CloudPebble
Simplified build system
Deploying from the command line
Application logs
Documentation
New Tools

CloudPebble

Now open-sourced and hosted by Pebble Technology
New Tools

CloudPebble

No installation - From zero to first installed app in 60 seconds
New Tools

Simplified build system

One tool for all your Pebble development
New Tools

Simplified build system

$ pebble new-project helloworld	
Creating new project hello-world	
$ cd helloworld	
$ pebble build	
Memory usage:	
=============	
Total app footprint in RAM:
822 bytes / ~24kb	
Free RAM available (heap):
23754 bytes	
'build' finished successfully (0.351s)
New Tools

Developer Connection

Use the Pebble mobile application to install and debug apps.
New Tools

Developer Connection

$ export PEBBLE_PHONE=192.168.1.42	
$ pebble install --logs	
[INFO
[INFO
[INFO
[INFO

]
]
]
]

Installation successful	
Enabling application logging...	
Displaying logs ... Ctrl-C to interrupt.	
D helloworld.c:58 Done initializing

A very simple and reliable way to install and watch log messages
New Tools

Documentation

We have re-written almost all of Pebble Documentation
Pebble documentation now includes:
• A Getting Started Guide
• Pebble Developer Guide with 11 chapters
• Pebble Mobile Developer Guide
• Pebble 2.0 Migration Guide
• API Reference for Pebble, iOS and Android
New Tools

Improving the developer experience
CloudPebble
Simplified build system
Deploying from the command line
Application logs
Documentation
SDK Overhaul

Getting ready for bigger applications and
an evolving SDK
SDK Overhaul

Migrating to Pebble 2.0

Pebble 2.0 is a major evolution of Pebble 1.0 with lots of changes in the
system and in the SDK
• Pebble 2.0 is not compatible with 1.0 apps
• Developers need to migrate their application to Pebble 2.0

Refer to Pebble 2.0 Migration Guide
http://developer.getpebble.com/2/guides/migration-guide.html
SDK Overhaul

Pebble application must
provide some metadata
through a JSON file in the
project called appinfo.json	
• Application name
• UUID
• Watchface / Watchapp
• Resources
• etc

Application metadata
SDK Overhaul

Using pointers and dynamic memory

In Pebble OS 2.0, all the SDK structures are opaque. This means we can
change them without you having to recompile your apps.
You cannot allocate structures as global variables as you did in 1.0. You
must use pointers and memory allocated dynamically by the system.
All calls to _init() functions become are replaced by _create() calls

Window my_window;	
window_init(&my_window);

becomes

Window *my_window;	
my_window = window_create();
SDK Overhaul

Getting closer to standards: C/UNIX

• pbl_main() is now called main()
• PblTm is replaced by struct tm
• string_format_time() is replaced by strftime()
• Pebble does not support timezones yet but we introduce gmtime()

and localtime() to prepare for timezone support.
• get_time() is replaced by localtime(time(NULL))
SDK Overhaul

Enforcing a subscription based Event system

Pebble 2.0 relies heavily on Events. You register to events with
_register functions.
All Pebble 1.x APIs have been updated: Timer, Tick, AppMessage, etc
PebbleAppHandlers handlers = {	
.timer_handler = &handle_timer	
};

becomes
timer = app_timer_register(1500, timer_callback, NULL);
SDK Overhaul

Dynamic Memory

Introducing two old friends: malloc() and free()
Each application has it’s own heap and is cleaned automatically
You can attach data to layers and windows (layer_create_with_data()
and window_set_user_data())
Your total memory is ~24k. Your heap space is 24k minus app size.
Pebble SDK includes tool to help you manage your memory:
$ pebble build
Memory usage:
=============
Total app footprint in RAM:
822 bytes / ~24kb
Free RAM available (heap):
23754 bytes
!
$ pebble logs
...
[INFO
] I Heap Usage for <Template App>: Available <23200B> Used <2344B> Still allocated <0B>
SDK Overhaul

Migration in a nutshell

Use pebble convert-project to generate the new appinfo.json file
Rename pbl_main() into main()	
Use pointers to structures instead of statically allocated structures
Use the SDK APIs to allocate memory and initialize the structs
Check the other APIs for changes
Refer to Pebble 2.0 Migration Guide
http://developer.getpebble.com/2/guides/migration-guide.html
SDK Overhaul

Getting ready for bigger applications and
an evolving SDK
New Frameworks

Event Services

A unique design pattern that communicates
with Pebble OS subsystems
New Frameworks

Event Services

The App Focus Service lets you know when your app is covered by a
modal window

typedef void (*AppFocusHandler)(bool in_focus);	
!

void app_focus_service_subscribe(AppFocusHandler handler);	
void app_focus_service_unsubscribe();
New Frameworks

Event Services

The Bluetooth Connection Service lets you know when the watch is
connected to the phone

typedef void (*BluetoothConnectionHandler)(bool connected);	
void bluetooth_connection_service_subscribe(BluetoothConnectionHandler handler);	
void bluetooth_connection_service_unsubscribe(void);	
!

bool bluetooth_connection_service_peek(void);
New Frameworks

Event Services

The Battery State Service can let you know when the watch is plugged
or unplugged
typedef struct {	
uint8_t charge_percent;	
bool is_charging;	
bool is_plugged;	
} BatteryChargeState; 	
!

typedef void (*BatteryStateHandler)(BatteryChargeState charge);	
void battery_state_service_subscribe(BatteryStateHandler handler);	
void battery_state_service_unsubscribe();	
!

void battery_state_service_peek(void);
New Frameworks

Event Services

A unique design pattern that communicates
with Pebble OS subsystems
Bluetooth, App Focus, Battery Status

Refer to Pebble 2.0 Event Services Guide
http://developer.getpebble.com/2/guides/event-service-guide.html
New Frameworks

Accelerometer

Let’s shake things up ...
The Accelerometer framework is designed with all use cases in mind:
user interaction for watchfaces, games, activity monitor, etc
New Frameworks

Accelerometer

Hardware accelerometer
!

Able to detect taps
Perform measurements at a given frequency
Store samples to save CPU time
New Frameworks

Accelerometer

The simplest way to use the accelerometer is to register for tap events
Those events are generated by the hardware and use very little energy
void accel_tap_handler(AccelAxisType axism int32_t direction) {	
// Process tap on ACCEL_AXIS_X, ACCEL_AXIS_Y or ACCEL_AXIS_Z	
}	
!

void handle_init() {	
accel_tap_service_subscribe(&accel_tap_handler);	
}	
!

void handle_deinit() { accel_tap_service_unsubscribe(); }
New Frameworks

Accelerometer

You can register to receive raw events one at a time

void accel_data_handler(AccelData *data, uint32_t num_samples) {	
process_sample(&data);	
}	
!

void handle_init() {	
accel_data_service_subscribe(1, &accel_data_handler);	
}	
!

void handle_deinit() { accel_data_service_unsubscribe(); }
New Frameworks

Accelerometer

The accelerometer API also supports storing samples on the hardware
void accel_data_handler(AccelData *data, uint32_t num_samples) {	
// Process 10 events - every 1 second	
}	
!

void handle_init() {	
accel_data_service_subscribe(10, &accel_data_handler);	
accel_service_set_sampling_rate(ACCEL_SAMPLING_10HZ);	
}
New Frameworks

Accelerometer

You can also peek at the accelerometer when updating your UI
This is the strategy we recommend for game developers
void tick_handler() {	
AccelData data;	
accel_service_peek(&data);	
}	
!

void handle_init() {	
accel_data_service_subscribe(0, NULL);	
}	
void handle_deinit() { accel_data_service_unsubscribe(); };
New Frameworks

Accelerometer

The Accelerometer Service
Tap events - Regular measures - Batch processing - Real time processing

Refer to Pebble 2.0 Accelerometer Guide
http://developer.getpebble.com/2/guides/accelerometer.html
New Frameworks

Data Logging

A better way to transfer data
The data logging service is a transparent buffer between your watch
app and your phone that reliably and efficiently carries your data.
New Frameworks

Data Logging

Your watchapp creates one or multiple data logging sessions and
pushes data to those sessions.
Using PebbleKit iOS and Android, your mobile app gets events when
new data is available for download.
Your data is managed by Pebble OS: saved on the watch filesystem,
persisted if the user moves to another app, transferred in batches.
New Frameworks

Data Logging

You create a spool with a call to data_logging_create ()
DataSpoolRef my_data_spool;	
!

void handle_init() {	
logging_session = data_logging_create(	
/* tag */
42, 	
/* data type */ 	
DATA_LOGGING_BYTE_ARRAY,	
/* length */
sizeof(AccelData),	
/* resume */
true );	
}
New Frameworks

Data Logging

Use data_logging_log() to add data to the spool

void accel_data_handler(AccelData *data, uint32_t num_samples) {	
DataLoggingResult r = data_logging_log(logging_session, data, num_samples);	
}
New Frameworks

Data Logging

Finally, use data_logging_finish() when you are done

void handle_deinit() {	
data_logging_finish(logging_session);	
}
New Frameworks

Data Logging - iOS

You register to data spooling on iOS by providing a delegate to the
dataLoggingService

[[[PBPebbleCentral defaultCentral] dataLoggingService] setDelegate:self];
New Frameworks

Data Logging - iOS

The delegate implements methods to consume the data
- (BOOL)dataLoggingService:(PBDataLoggingService *)service 	
hasUInt32s:(const UInt32 [])data 	
numberOfItems:(UInt16)numberOfItems 	
forDataLoggingSession:(PBDataLoggingSessionMetadata *)sessionMetadata {	
// Return YES when the data has been processed.	
}	

!
- (void)dataLoggingService:(PBDataLoggingService *)service 	
sessionDidFinish:(PBDataLoggingSessionMetadata *)sessionMetadata {	
// Session closed.	
}
New Frameworks

Data Logging

A better way to transfer data
The data logging service is a transparent buffer between your watch
app and your phone that reliably and efficiently carries your data.

Refer to the Ocean Data Survey example
Examples/data-logging-demo
New Frameworks

Persistent Storage

Store data on the watch
Persistent storage is perfect to save user settings, cache
data from the phone app, high scores, etc
New Frameworks

Persistent Storage

Every application get its own persistent storage space. Its size is limited
to 4kB.
Each value is associated to a uint32_t

key.

Persistent storage supports saving integers, strings and byte arrays.
The maximum size of byte arrays and strings is defined by
PERSIST_DATA_MAX_LENGTH (currently set to 256 bytes)
New Frameworks

Persistent Storage

To write data in persistent storage, call one of the persist_write functions:
You should check the return value for error codes (anything but 0 is bad news)
void handle_deinit() {	
persist_write_bool(TRUTH_KEY, true);	
persist_write_int(DOUGLAS_KEY, 42);	
persist_write_string(USERNAME_KEY, “thomas”); 	
	
uint8_t byte_array[42];	
persist_write_data(DATA_KEY, sizeof(byte_array), byte_array);	
}
New Frameworks

Persistent Storage

The function persist_exists(key) returns a boolean indicating if the key
exists or not.
To read data from persistent storage, use the persist_read functions
void handle_init() {	
bool truth = persist_read_bool(TRUTH_KEY);	
int douglas_value = persist_read_int(DOUGLAS_KEY);	
	
char username[20];	
persist_read_string(USERNAME_KEY, 20, username);	
	
uint8_t byte_array[42];	
persist_read_data(DATA_KEY, sizeof(byte_array), byte_array);	
}
New Frameworks

Persistent Storage

You can use persist_delete() to remove a key from persistent storage
New Frameworks

Persistent Storage

Store data on the watch
Persistent storage is perfect to save user settings, cache
data from the phone app, high scores, etc

Refer to Pebble Persistent Storage Guide
http://developer.getpebble.com/2/guides/persistent-storage.html
New Frameworks

PebbleKit JavaScript

Expand the reach of your Pebble apps with
JavaScript logic running on the phone
Make http calls on the phone, process the reply and send
it to your watchapp.
Send notification. Use the phone GPS.
Use a webview in the phone to provide a configuration
screen to your application.
New Frameworks

PebbleKit JavaScript

Add a pebble-js-app.js file in your project
Or use pebble new-project --javascript
When Pebble mobile application installs your pbw,
the JS is extracted and saved on the phone.
Your JavaScript code is started with your
watchapp/watchface and will run as long as your
app is in the foreground on Pebble.
New Frameworks

PebbleKit JavaScript

Pebble sandbox provides API to receive messages from the watch,
make http requests, send new messages to the watch, etc.
On the watch, AppMessage APIs are used to receive and send data.
PebbleKit JS is completely independent of the platform (iOS, Android).
New Frameworks

PebbleKit JavaScript

The sandbox provides a Pebble.addEventListener function to register
for events.
A ‘ready’ event is fired when your JavaScript is ready to execute.
PebbleEventListener.addEventListener("ready",	
function(e) {	
startRemoteRequest();	
}	
});
New Frameworks

PebbleKit JavaScript

Your JavaScript code can send notifications to the watch:
Pebble.showSimpleNotificationOnPebble(title, text)

You can also use the standard console.log() calls to log messages to
the Pebble console.
New Frameworks

PebbleKit JavaScript

Your JS code can also process messages coming from the watch
through the ‘appmessage’ event.

PebbleEventListener.addEventListener("appmessage",	
function(e) {	
var temperatureRequest = e.payload.temperatureRequest;	
if (temperatureRequest) {	
fetchWeather();	
}	
});
New Frameworks

PebbleKit JavaScript

To send messages to the watch, use Pebble.sendAppMessage()
PebbleKit JS automatically transforms JS dictionaries to Pebble’s
Dictionary

Pebble.sendAppMessage({ "icon": ICON_SUNNY, "temperature": "28oC"});
New Frameworks

PebbleKit JavaScript

The Pebble JavaScript sandbox provides the standard XMLHttpRequest
method to make http calls.
var req = new XMLHttpRequest();	
req.open('GET', 'http://api.openweathermap.org/data/2.1/find/city?lat=37.830310&lon=-122.270831&cnt=1', true);	
req.onload = function(e) {	
if (req.readyState == 4 && req.status == 200) {	
if(req.status == 200) {	
var response = JSON.parse(req.responseText);	
var temperature = result.list[0].main.temp;	
var icon = result.list[0].main.icon;	
Pebble.sendAppMessage({ "icon":icon, "temperature":temperature + "u00B0C"});	
} else { console.log("Error"); }	
}	
}	
req.send(null);
New Frameworks

PebbleKit JavaScript

Pebble sandbox provides several standard APIs:
• HTML5 Geolocation API through navigator.geolocation
• Local Storage APIs through window.localStorage
New Frameworks

PebbleKit JavaScript

Your application can show a Configure button on the phone screen
When the user clicks on this button, the configure event is fired
The html page can return information:
document.location.href = “pebblejs:///close#some-data-set”
Pebble.addEventListener("showConfiguration", function() {	
console.log("showing configuration");	
Pebble.openURL('http://assets.getpebble.com.s3-website-us-east-1.amazonaws.com/pebble-js/configurable.html');	
});	
Pebble.addEventListener("webviewclosed", function(e) {	
console.log("configuration closed");	
});
New Frameworks

PebbleKit JavaScript

Expand the reach of your watchapp with
JavaScript logic running on the phone
Make http calls on the phone, process the reply and send
it to your watchapp.
Send notification. Use the phone GPS.
Use a webview in the phone to provide a configuration
screen to your application.

Refer to Pebble JavaScript Guide
http://developer.getpebble.com/2/guides/javascript-guide.html
WRAPPING UP
Updated Tools

SDK Overhaul

New Frameworks

Cloud Pebble

App Metadata

Event Service

pebble

Following Standards

Accelerometer

Developer Connection

Events based APIs

Data Logging

Application logs

Dynamic Memory

Persistent Storage

Documentation

2.0 Migration Guide

PebbleKit JS
Downloading the new SDK
!

Available now on http://developer.getpebble.com/2/
ENJOY!

Questions?
!

#pebble on irc.freenode.net
AMA on reddit

More Related Content

What's hot

CMake: Improving Software Quality and Process
CMake: Improving Software Quality and ProcessCMake: Improving Software Quality and Process
CMake: Improving Software Quality and ProcessMarcus Hanwell
 
Gradle in a Polyglot World
Gradle in a Polyglot WorldGradle in a Polyglot World
Gradle in a Polyglot WorldSchalk Cronjé
 
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰KAI CHU CHUNG
 
Ship your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerShip your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerMarcus Lönnberg
 
HTTP APIs as first class procedures in your language: cutting out SDK complex...
HTTP APIs as first class procedures in your language: cutting out SDK complex...HTTP APIs as first class procedures in your language: cutting out SDK complex...
HTTP APIs as first class procedures in your language: cutting out SDK complex...ProgrammableWeb
 
Developing IT infrastructures with Puppet
Developing IT infrastructures with PuppetDeveloping IT infrastructures with Puppet
Developing IT infrastructures with PuppetAlessandro Franceschi
 
Virtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitVirtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitAndreas Heim
 
Cooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with JitterbugCooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with JitterbugDavid Golden
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderSadayuki Furuhashi
 
Puppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction KitPuppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction KitAlessandro Franceschi
 
CiklumCPPSat: Alexey Podoba "Automatic assembly. Cmake"
CiklumCPPSat: Alexey Podoba "Automatic assembly. Cmake"CiklumCPPSat: Alexey Podoba "Automatic assembly. Cmake"
CiklumCPPSat: Alexey Podoba "Automatic assembly. Cmake"Ciklum Ukraine
 
Kubernetes Scheduler deep dive
Kubernetes Scheduler deep diveKubernetes Scheduler deep dive
Kubernetes Scheduler deep diveDONGJIN KIM
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twentiesPuppet
 
How to build your own OpenStack distro using Puppet OpenStack
How to build your own OpenStack distro using Puppet OpenStackHow to build your own OpenStack distro using Puppet OpenStack
How to build your own OpenStack distro using Puppet OpenStackOpenStack
 
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)ngotogenome
 
Puppet Continuous Integration with PE and GitLab
Puppet Continuous Integration with PE and GitLabPuppet Continuous Integration with PE and GitLab
Puppet Continuous Integration with PE and GitLabAlessandro Franceschi
 
PECL Picks - Extensions to make your life better
PECL Picks - Extensions to make your life betterPECL Picks - Extensions to make your life better
PECL Picks - Extensions to make your life betterZendCon
 

What's hot (20)

CMake: Improving Software Quality and Process
CMake: Improving Software Quality and ProcessCMake: Improving Software Quality and Process
CMake: Improving Software Quality and Process
 
Gradle in a Polyglot World
Gradle in a Polyglot WorldGradle in a Polyglot World
Gradle in a Polyglot World
 
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
 
Ship your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerShip your Scala code often and easy with Docker
Ship your Scala code often and easy with Docker
 
HTTP APIs as first class procedures in your language: cutting out SDK complex...
HTTP APIs as first class procedures in your language: cutting out SDK complex...HTTP APIs as first class procedures in your language: cutting out SDK complex...
HTTP APIs as first class procedures in your language: cutting out SDK complex...
 
Developing IT infrastructures with Puppet
Developing IT infrastructures with PuppetDeveloping IT infrastructures with Puppet
Developing IT infrastructures with Puppet
 
Virtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profitVirtualize and automate your development environment for fun and profit
Virtualize and automate your development environment for fun and profit
 
Cooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with JitterbugCooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with Jitterbug
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loader
 
Puppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction KitPuppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction Kit
 
CiklumCPPSat: Alexey Podoba "Automatic assembly. Cmake"
CiklumCPPSat: Alexey Podoba "Automatic assembly. Cmake"CiklumCPPSat: Alexey Podoba "Automatic assembly. Cmake"
CiklumCPPSat: Alexey Podoba "Automatic assembly. Cmake"
 
Kubernetes Scheduler deep dive
Kubernetes Scheduler deep diveKubernetes Scheduler deep dive
Kubernetes Scheduler deep dive
 
Pc54
Pc54Pc54
Pc54
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Django via Docker
Django via DockerDjango via Docker
Django via Docker
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
 
How to build your own OpenStack distro using Puppet OpenStack
How to build your own OpenStack distro using Puppet OpenStackHow to build your own OpenStack distro using Puppet OpenStack
How to build your own OpenStack distro using Puppet OpenStack
 
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
 
Puppet Continuous Integration with PE and GitLab
Puppet Continuous Integration with PE and GitLabPuppet Continuous Integration with PE and GitLab
Puppet Continuous Integration with PE and GitLab
 
PECL Picks - Extensions to make your life better
PECL Picks - Extensions to make your life betterPECL Picks - Extensions to make your life better
PECL Picks - Extensions to make your life better
 

Similar to Announcing Pebble SDK 2.0

Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015Microsoft
 
Node.js primer for ITE students
Node.js primer for ITE studentsNode.js primer for ITE students
Node.js primer for ITE studentsQuhan Arunasalam
 
The App Developer's Kubernetes Toolbox
The App Developer's Kubernetes ToolboxThe App Developer's Kubernetes Toolbox
The App Developer's Kubernetes ToolboxNebulaworks
 
Ultimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on KubernetesUltimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on Kuberneteskloia
 
[Nuxeo World 2013] Roadmap 2014 - Technical Part
[Nuxeo World 2013] Roadmap 2014 - Technical Part [Nuxeo World 2013] Roadmap 2014 - Technical Part
[Nuxeo World 2013] Roadmap 2014 - Technical Part Nuxeo
 
Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3Bruce Pentreath
 
Rome .NET Conference 2024 - Remote Conference
Rome .NET Conference 2024  - Remote ConferenceRome .NET Conference 2024  - Remote Conference
Rome .NET Conference 2024 - Remote ConferenceHamida Rebai Trabelsi
 
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...Anil Sharma
 
Build Event-Driven Microservices with Confluent Cloud Workshop #1
Build Event-Driven Microservices with Confluent Cloud Workshop #1Build Event-Driven Microservices with Confluent Cloud Workshop #1
Build Event-Driven Microservices with Confluent Cloud Workshop #1confluent
 
Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0Steven Smith
 
Background Tasks with Worker Service
Background Tasks with Worker ServiceBackground Tasks with Worker Service
Background Tasks with Worker Servicessusere19c741
 
.NET Core Apps: Design & Development
.NET Core Apps: Design & Development.NET Core Apps: Design & Development
.NET Core Apps: Design & DevelopmentGlobalLogic Ukraine
 
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...Lightbend
 
04_Azure Kubernetes Service: Basic Practices for Developers_GAB2019
04_Azure Kubernetes Service: Basic Practices for Developers_GAB201904_Azure Kubernetes Service: Basic Practices for Developers_GAB2019
04_Azure Kubernetes Service: Basic Practices for Developers_GAB2019Kumton Suttiraksiri
 
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 RICOH THETA x IoT Developers Contest : Cloud API Seminar RICOH THETA x IoT Developers Contest : Cloud API Seminar
RICOH THETA x IoT Developers Contest : Cloud API Seminarcontest-theta360
 
Pivotal Cloud Foundry 2.5: A First Look
Pivotal Cloud Foundry 2.5: A First LookPivotal Cloud Foundry 2.5: A First Look
Pivotal Cloud Foundry 2.5: A First LookVMware Tanzu
 

Similar to Announcing Pebble SDK 2.0 (20)

Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015Red Hat Forum Benelux 2015
Red Hat Forum Benelux 2015
 
Node.js primer for ITE students
Node.js primer for ITE studentsNode.js primer for ITE students
Node.js primer for ITE students
 
The App Developer's Kubernetes Toolbox
The App Developer's Kubernetes ToolboxThe App Developer's Kubernetes Toolbox
The App Developer's Kubernetes Toolbox
 
Ultimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on KubernetesUltimate Guide to Microservice Architecture on Kubernetes
Ultimate Guide to Microservice Architecture on Kubernetes
 
[Nuxeo World 2013] Roadmap 2014 - Technical Part
[Nuxeo World 2013] Roadmap 2014 - Technical Part [Nuxeo World 2013] Roadmap 2014 - Technical Part
[Nuxeo World 2013] Roadmap 2014 - Technical Part
 
Angular 2.0
Angular  2.0Angular  2.0
Angular 2.0
 
Sst hackathon express
Sst hackathon expressSst hackathon express
Sst hackathon express
 
Stmik bandung
Stmik bandungStmik bandung
Stmik bandung
 
Pebble Watch Development
Pebble Watch DevelopmentPebble Watch Development
Pebble Watch Development
 
Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3
 
Rome .NET Conference 2024 - Remote Conference
Rome .NET Conference 2024  - Remote ConferenceRome .NET Conference 2024  - Remote Conference
Rome .NET Conference 2024 - Remote Conference
 
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...
tutorials-visual-studio_visual-studio-2015-preview-comes-with-emulator-for-an...
 
Build Event-Driven Microservices with Confluent Cloud Workshop #1
Build Event-Driven Microservices with Confluent Cloud Workshop #1Build Event-Driven Microservices with Confluent Cloud Workshop #1
Build Event-Driven Microservices with Confluent Cloud Workshop #1
 
Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0
 
Background Tasks with Worker Service
Background Tasks with Worker ServiceBackground Tasks with Worker Service
Background Tasks with Worker Service
 
.NET Core Apps: Design & Development
.NET Core Apps: Design & Development.NET Core Apps: Design & Development
.NET Core Apps: Design & Development
 
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...
How to build streaming data pipelines with Akka Streams, Flink, and Spark usi...
 
04_Azure Kubernetes Service: Basic Practices for Developers_GAB2019
04_Azure Kubernetes Service: Basic Practices for Developers_GAB201904_Azure Kubernetes Service: Basic Practices for Developers_GAB2019
04_Azure Kubernetes Service: Basic Practices for Developers_GAB2019
 
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 RICOH THETA x IoT Developers Contest : Cloud API Seminar RICOH THETA x IoT Developers Contest : Cloud API Seminar
RICOH THETA x IoT Developers Contest : Cloud API Seminar
 
Pivotal Cloud Foundry 2.5: A First Look
Pivotal Cloud Foundry 2.5: A First LookPivotal Cloud Foundry 2.5: A First Look
Pivotal Cloud Foundry 2.5: A First Look
 

More from Pebble Technology

#PDR15 - Awesome Appstore Assets
#PDR15 - Awesome Appstore Assets#PDR15 - Awesome Appstore Assets
#PDR15 - Awesome Appstore AssetsPebble Technology
 
#PDR15 - Smartstrap Workshop
#PDR15 - Smartstrap Workshop#PDR15 - Smartstrap Workshop
#PDR15 - Smartstrap WorkshopPebble Technology
 
#PDR15 - Data Analytics and Pebble
#PDR15 - Data Analytics and Pebble#PDR15 - Data Analytics and Pebble
#PDR15 - Data Analytics and PebblePebble Technology
 
#PDR15 - Best Use Cases For Timeline
#PDR15 - Best Use Cases For Timeline#PDR15 - Best Use Cases For Timeline
#PDR15 - Best Use Cases For TimelinePebble Technology
 
#PDR15 - Developing for Round
#PDR15 - Developing for Round#PDR15 - Developing for Round
#PDR15 - Developing for RoundPebble Technology
 
#PDR15 - Designing for Pebble
#PDR15 - Designing for Pebble#PDR15 - Designing for Pebble
#PDR15 - Designing for PebblePebble Technology
 
Overlay Technique | Pebble Developer Retreat 2014
Overlay Technique | Pebble Developer Retreat 2014Overlay Technique | Pebble Developer Retreat 2014
Overlay Technique | Pebble Developer Retreat 2014Pebble Technology
 
Connecting Pebble to the World
Connecting Pebble to the WorldConnecting Pebble to the World
Connecting Pebble to the WorldPebble Technology
 
Guest Presentation - Strap | Pebble Developer Retreat 2014
Guest Presentation - Strap | Pebble Developer Retreat 2014Guest Presentation - Strap | Pebble Developer Retreat 2014
Guest Presentation - Strap | Pebble Developer Retreat 2014Pebble Technology
 
Battery Life | Pebble Developer Retreat 2014
Battery Life | Pebble Developer Retreat 2014Battery Life | Pebble Developer Retreat 2014
Battery Life | Pebble Developer Retreat 2014Pebble Technology
 
Thomas Sarlandie Kickoff Talk | Pebble Developer Retreat 2014
Thomas Sarlandie Kickoff Talk | Pebble Developer Retreat 2014Thomas Sarlandie Kickoff Talk | Pebble Developer Retreat 2014
Thomas Sarlandie Kickoff Talk | Pebble Developer Retreat 2014Pebble Technology
 
Advanced Techniques: Size | Pebble Developer Retreat 2014
Advanced Techniques: Size | Pebble Developer Retreat 2014Advanced Techniques: Size | Pebble Developer Retreat 2014
Advanced Techniques: Size | Pebble Developer Retreat 2014Pebble Technology
 
Advanced Techniques: Graphics | Pebble Developer Retreat 2014
Advanced Techniques: Graphics | Pebble Developer Retreat 2014Advanced Techniques: Graphics | Pebble Developer Retreat 2014
Advanced Techniques: Graphics | Pebble Developer Retreat 2014Pebble Technology
 

More from Pebble Technology (18)

#PDR15 - Awesome Appstore Assets
#PDR15 - Awesome Appstore Assets#PDR15 - Awesome Appstore Assets
#PDR15 - Awesome Appstore Assets
 
#PDR15 - Smartstrap Workshop
#PDR15 - Smartstrap Workshop#PDR15 - Smartstrap Workshop
#PDR15 - Smartstrap Workshop
 
#PDR15 - Data Analytics and Pebble
#PDR15 - Data Analytics and Pebble#PDR15 - Data Analytics and Pebble
#PDR15 - Data Analytics and Pebble
 
#PDR15 - Best Use Cases For Timeline
#PDR15 - Best Use Cases For Timeline#PDR15 - Best Use Cases For Timeline
#PDR15 - Best Use Cases For Timeline
 
#PDR15 - PebbleKit iOS 3.0
#PDR15 - PebbleKit iOS 3.0#PDR15 - PebbleKit iOS 3.0
#PDR15 - PebbleKit iOS 3.0
 
#PDR15 - Voice API
#PDR15 - Voice API#PDR15 - Voice API
#PDR15 - Voice API
 
#PDR15 - Developing for Round
#PDR15 - Developing for Round#PDR15 - Developing for Round
#PDR15 - Developing for Round
 
#PDR15 - Designing for Pebble
#PDR15 - Designing for Pebble#PDR15 - Designing for Pebble
#PDR15 - Designing for Pebble
 
#PDR15 Kick-Off
#PDR15 Kick-Off#PDR15 Kick-Off
#PDR15 Kick-Off
 
Pebble Slate Workshop
Pebble Slate WorkshopPebble Slate Workshop
Pebble Slate Workshop
 
Overlay Technique | Pebble Developer Retreat 2014
Overlay Technique | Pebble Developer Retreat 2014Overlay Technique | Pebble Developer Retreat 2014
Overlay Technique | Pebble Developer Retreat 2014
 
Connecting Pebble to the World
Connecting Pebble to the WorldConnecting Pebble to the World
Connecting Pebble to the World
 
Guest Presentation - Strap | Pebble Developer Retreat 2014
Guest Presentation - Strap | Pebble Developer Retreat 2014Guest Presentation - Strap | Pebble Developer Retreat 2014
Guest Presentation - Strap | Pebble Developer Retreat 2014
 
Battery Life | Pebble Developer Retreat 2014
Battery Life | Pebble Developer Retreat 2014Battery Life | Pebble Developer Retreat 2014
Battery Life | Pebble Developer Retreat 2014
 
Thomas Sarlandie Kickoff Talk | Pebble Developer Retreat 2014
Thomas Sarlandie Kickoff Talk | Pebble Developer Retreat 2014Thomas Sarlandie Kickoff Talk | Pebble Developer Retreat 2014
Thomas Sarlandie Kickoff Talk | Pebble Developer Retreat 2014
 
Advanced Techniques: Size | Pebble Developer Retreat 2014
Advanced Techniques: Size | Pebble Developer Retreat 2014Advanced Techniques: Size | Pebble Developer Retreat 2014
Advanced Techniques: Size | Pebble Developer Retreat 2014
 
Advanced Techniques: Graphics | Pebble Developer Retreat 2014
Advanced Techniques: Graphics | Pebble Developer Retreat 2014Advanced Techniques: Graphics | Pebble Developer Retreat 2014
Advanced Techniques: Graphics | Pebble Developer Retreat 2014
 
Pebble wearables devcon
Pebble wearables devconPebble wearables devcon
Pebble wearables devcon
 

Recently uploaded

Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsAndrey Dotsenko
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 

Recently uploaded (20)

Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 

Announcing Pebble SDK 2.0

  • 2. A MAJOR UPDATE New Tools SDK Overhaul New APIs
  • 3. Introducing Pebble SDK 2.0 If you are watching live, you can ask questions On our IRC channel: #pebble on irc.freenode.net During our AMA on Reddit at 12pm PST today This is recorded and will be available on our YouTube channel and on the developer web site Friendly warning: This presentation is mostly intended for developers
  • 4. New Tools Improving the developer experience CloudPebble Simplified build system Deploying from the command line Application logs Documentation
  • 5. New Tools CloudPebble Now open-sourced and hosted by Pebble Technology
  • 6. New Tools CloudPebble No installation - From zero to first installed app in 60 seconds
  • 7. New Tools Simplified build system One tool for all your Pebble development
  • 8. New Tools Simplified build system $ pebble new-project helloworld Creating new project hello-world $ cd helloworld $ pebble build Memory usage: ============= Total app footprint in RAM: 822 bytes / ~24kb Free RAM available (heap): 23754 bytes 'build' finished successfully (0.351s)
  • 9. New Tools Developer Connection Use the Pebble mobile application to install and debug apps.
  • 10. New Tools Developer Connection $ export PEBBLE_PHONE=192.168.1.42 $ pebble install --logs [INFO [INFO [INFO [INFO ] ] ] ] Installation successful Enabling application logging... Displaying logs ... Ctrl-C to interrupt. D helloworld.c:58 Done initializing A very simple and reliable way to install and watch log messages
  • 11. New Tools Documentation We have re-written almost all of Pebble Documentation Pebble documentation now includes: • A Getting Started Guide • Pebble Developer Guide with 11 chapters • Pebble Mobile Developer Guide • Pebble 2.0 Migration Guide • API Reference for Pebble, iOS and Android
  • 12. New Tools Improving the developer experience CloudPebble Simplified build system Deploying from the command line Application logs Documentation
  • 13. SDK Overhaul Getting ready for bigger applications and an evolving SDK
  • 14. SDK Overhaul Migrating to Pebble 2.0 Pebble 2.0 is a major evolution of Pebble 1.0 with lots of changes in the system and in the SDK • Pebble 2.0 is not compatible with 1.0 apps • Developers need to migrate their application to Pebble 2.0 Refer to Pebble 2.0 Migration Guide http://developer.getpebble.com/2/guides/migration-guide.html
  • 15. SDK Overhaul Pebble application must provide some metadata through a JSON file in the project called appinfo.json • Application name • UUID • Watchface / Watchapp • Resources • etc Application metadata
  • 16. SDK Overhaul Using pointers and dynamic memory In Pebble OS 2.0, all the SDK structures are opaque. This means we can change them without you having to recompile your apps. You cannot allocate structures as global variables as you did in 1.0. You must use pointers and memory allocated dynamically by the system. All calls to _init() functions become are replaced by _create() calls Window my_window; window_init(&my_window); becomes Window *my_window; my_window = window_create();
  • 17. SDK Overhaul Getting closer to standards: C/UNIX • pbl_main() is now called main() • PblTm is replaced by struct tm • string_format_time() is replaced by strftime() • Pebble does not support timezones yet but we introduce gmtime() and localtime() to prepare for timezone support. • get_time() is replaced by localtime(time(NULL))
  • 18. SDK Overhaul Enforcing a subscription based Event system Pebble 2.0 relies heavily on Events. You register to events with _register functions. All Pebble 1.x APIs have been updated: Timer, Tick, AppMessage, etc PebbleAppHandlers handlers = { .timer_handler = &handle_timer }; becomes timer = app_timer_register(1500, timer_callback, NULL);
  • 19. SDK Overhaul Dynamic Memory Introducing two old friends: malloc() and free() Each application has it’s own heap and is cleaned automatically You can attach data to layers and windows (layer_create_with_data() and window_set_user_data()) Your total memory is ~24k. Your heap space is 24k minus app size. Pebble SDK includes tool to help you manage your memory: $ pebble build Memory usage: ============= Total app footprint in RAM: 822 bytes / ~24kb Free RAM available (heap): 23754 bytes ! $ pebble logs ... [INFO ] I Heap Usage for <Template App>: Available <23200B> Used <2344B> Still allocated <0B>
  • 20. SDK Overhaul Migration in a nutshell Use pebble convert-project to generate the new appinfo.json file Rename pbl_main() into main() Use pointers to structures instead of statically allocated structures Use the SDK APIs to allocate memory and initialize the structs Check the other APIs for changes Refer to Pebble 2.0 Migration Guide http://developer.getpebble.com/2/guides/migration-guide.html
  • 21. SDK Overhaul Getting ready for bigger applications and an evolving SDK
  • 22. New Frameworks Event Services A unique design pattern that communicates with Pebble OS subsystems
  • 23. New Frameworks Event Services The App Focus Service lets you know when your app is covered by a modal window typedef void (*AppFocusHandler)(bool in_focus); ! void app_focus_service_subscribe(AppFocusHandler handler); void app_focus_service_unsubscribe();
  • 24. New Frameworks Event Services The Bluetooth Connection Service lets you know when the watch is connected to the phone typedef void (*BluetoothConnectionHandler)(bool connected); void bluetooth_connection_service_subscribe(BluetoothConnectionHandler handler); void bluetooth_connection_service_unsubscribe(void); ! bool bluetooth_connection_service_peek(void);
  • 25. New Frameworks Event Services The Battery State Service can let you know when the watch is plugged or unplugged typedef struct { uint8_t charge_percent; bool is_charging; bool is_plugged; } BatteryChargeState; ! typedef void (*BatteryStateHandler)(BatteryChargeState charge); void battery_state_service_subscribe(BatteryStateHandler handler); void battery_state_service_unsubscribe(); ! void battery_state_service_peek(void);
  • 26. New Frameworks Event Services A unique design pattern that communicates with Pebble OS subsystems Bluetooth, App Focus, Battery Status Refer to Pebble 2.0 Event Services Guide http://developer.getpebble.com/2/guides/event-service-guide.html
  • 27. New Frameworks Accelerometer Let’s shake things up ... The Accelerometer framework is designed with all use cases in mind: user interaction for watchfaces, games, activity monitor, etc
  • 28. New Frameworks Accelerometer Hardware accelerometer ! Able to detect taps Perform measurements at a given frequency Store samples to save CPU time
  • 29. New Frameworks Accelerometer The simplest way to use the accelerometer is to register for tap events Those events are generated by the hardware and use very little energy void accel_tap_handler(AccelAxisType axism int32_t direction) { // Process tap on ACCEL_AXIS_X, ACCEL_AXIS_Y or ACCEL_AXIS_Z } ! void handle_init() { accel_tap_service_subscribe(&accel_tap_handler); } ! void handle_deinit() { accel_tap_service_unsubscribe(); }
  • 30. New Frameworks Accelerometer You can register to receive raw events one at a time void accel_data_handler(AccelData *data, uint32_t num_samples) { process_sample(&data); } ! void handle_init() { accel_data_service_subscribe(1, &accel_data_handler); } ! void handle_deinit() { accel_data_service_unsubscribe(); }
  • 31. New Frameworks Accelerometer The accelerometer API also supports storing samples on the hardware void accel_data_handler(AccelData *data, uint32_t num_samples) { // Process 10 events - every 1 second } ! void handle_init() { accel_data_service_subscribe(10, &accel_data_handler); accel_service_set_sampling_rate(ACCEL_SAMPLING_10HZ); }
  • 32. New Frameworks Accelerometer You can also peek at the accelerometer when updating your UI This is the strategy we recommend for game developers void tick_handler() { AccelData data; accel_service_peek(&data); } ! void handle_init() { accel_data_service_subscribe(0, NULL); } void handle_deinit() { accel_data_service_unsubscribe(); };
  • 33. New Frameworks Accelerometer The Accelerometer Service Tap events - Regular measures - Batch processing - Real time processing Refer to Pebble 2.0 Accelerometer Guide http://developer.getpebble.com/2/guides/accelerometer.html
  • 34. New Frameworks Data Logging A better way to transfer data The data logging service is a transparent buffer between your watch app and your phone that reliably and efficiently carries your data.
  • 35. New Frameworks Data Logging Your watchapp creates one or multiple data logging sessions and pushes data to those sessions. Using PebbleKit iOS and Android, your mobile app gets events when new data is available for download. Your data is managed by Pebble OS: saved on the watch filesystem, persisted if the user moves to another app, transferred in batches.
  • 36. New Frameworks Data Logging You create a spool with a call to data_logging_create () DataSpoolRef my_data_spool; ! void handle_init() { logging_session = data_logging_create( /* tag */ 42, /* data type */ DATA_LOGGING_BYTE_ARRAY, /* length */ sizeof(AccelData), /* resume */ true ); }
  • 37. New Frameworks Data Logging Use data_logging_log() to add data to the spool void accel_data_handler(AccelData *data, uint32_t num_samples) { DataLoggingResult r = data_logging_log(logging_session, data, num_samples); }
  • 38. New Frameworks Data Logging Finally, use data_logging_finish() when you are done void handle_deinit() { data_logging_finish(logging_session); }
  • 39. New Frameworks Data Logging - iOS You register to data spooling on iOS by providing a delegate to the dataLoggingService [[[PBPebbleCentral defaultCentral] dataLoggingService] setDelegate:self];
  • 40. New Frameworks Data Logging - iOS The delegate implements methods to consume the data - (BOOL)dataLoggingService:(PBDataLoggingService *)service hasUInt32s:(const UInt32 [])data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)sessionMetadata { // Return YES when the data has been processed. } ! - (void)dataLoggingService:(PBDataLoggingService *)service sessionDidFinish:(PBDataLoggingSessionMetadata *)sessionMetadata { // Session closed. }
  • 41. New Frameworks Data Logging A better way to transfer data The data logging service is a transparent buffer between your watch app and your phone that reliably and efficiently carries your data. Refer to the Ocean Data Survey example Examples/data-logging-demo
  • 42. New Frameworks Persistent Storage Store data on the watch Persistent storage is perfect to save user settings, cache data from the phone app, high scores, etc
  • 43. New Frameworks Persistent Storage Every application get its own persistent storage space. Its size is limited to 4kB. Each value is associated to a uint32_t key. Persistent storage supports saving integers, strings and byte arrays. The maximum size of byte arrays and strings is defined by PERSIST_DATA_MAX_LENGTH (currently set to 256 bytes)
  • 44. New Frameworks Persistent Storage To write data in persistent storage, call one of the persist_write functions: You should check the return value for error codes (anything but 0 is bad news) void handle_deinit() { persist_write_bool(TRUTH_KEY, true); persist_write_int(DOUGLAS_KEY, 42); persist_write_string(USERNAME_KEY, “thomas”); uint8_t byte_array[42]; persist_write_data(DATA_KEY, sizeof(byte_array), byte_array); }
  • 45. New Frameworks Persistent Storage The function persist_exists(key) returns a boolean indicating if the key exists or not. To read data from persistent storage, use the persist_read functions void handle_init() { bool truth = persist_read_bool(TRUTH_KEY); int douglas_value = persist_read_int(DOUGLAS_KEY); char username[20]; persist_read_string(USERNAME_KEY, 20, username); uint8_t byte_array[42]; persist_read_data(DATA_KEY, sizeof(byte_array), byte_array); }
  • 46. New Frameworks Persistent Storage You can use persist_delete() to remove a key from persistent storage
  • 47. New Frameworks Persistent Storage Store data on the watch Persistent storage is perfect to save user settings, cache data from the phone app, high scores, etc Refer to Pebble Persistent Storage Guide http://developer.getpebble.com/2/guides/persistent-storage.html
  • 48. New Frameworks PebbleKit JavaScript Expand the reach of your Pebble apps with JavaScript logic running on the phone Make http calls on the phone, process the reply and send it to your watchapp. Send notification. Use the phone GPS. Use a webview in the phone to provide a configuration screen to your application.
  • 49. New Frameworks PebbleKit JavaScript Add a pebble-js-app.js file in your project Or use pebble new-project --javascript When Pebble mobile application installs your pbw, the JS is extracted and saved on the phone. Your JavaScript code is started with your watchapp/watchface and will run as long as your app is in the foreground on Pebble.
  • 50. New Frameworks PebbleKit JavaScript Pebble sandbox provides API to receive messages from the watch, make http requests, send new messages to the watch, etc. On the watch, AppMessage APIs are used to receive and send data. PebbleKit JS is completely independent of the platform (iOS, Android).
  • 51. New Frameworks PebbleKit JavaScript The sandbox provides a Pebble.addEventListener function to register for events. A ‘ready’ event is fired when your JavaScript is ready to execute. PebbleEventListener.addEventListener("ready", function(e) { startRemoteRequest(); } });
  • 52. New Frameworks PebbleKit JavaScript Your JavaScript code can send notifications to the watch: Pebble.showSimpleNotificationOnPebble(title, text) You can also use the standard console.log() calls to log messages to the Pebble console.
  • 53. New Frameworks PebbleKit JavaScript Your JS code can also process messages coming from the watch through the ‘appmessage’ event. PebbleEventListener.addEventListener("appmessage", function(e) { var temperatureRequest = e.payload.temperatureRequest; if (temperatureRequest) { fetchWeather(); } });
  • 54. New Frameworks PebbleKit JavaScript To send messages to the watch, use Pebble.sendAppMessage() PebbleKit JS automatically transforms JS dictionaries to Pebble’s Dictionary Pebble.sendAppMessage({ "icon": ICON_SUNNY, "temperature": "28oC"});
  • 55. New Frameworks PebbleKit JavaScript The Pebble JavaScript sandbox provides the standard XMLHttpRequest method to make http calls. var req = new XMLHttpRequest(); req.open('GET', 'http://api.openweathermap.org/data/2.1/find/city?lat=37.830310&lon=-122.270831&cnt=1', true); req.onload = function(e) { if (req.readyState == 4 && req.status == 200) { if(req.status == 200) { var response = JSON.parse(req.responseText); var temperature = result.list[0].main.temp; var icon = result.list[0].main.icon; Pebble.sendAppMessage({ "icon":icon, "temperature":temperature + "u00B0C"}); } else { console.log("Error"); } } } req.send(null);
  • 56. New Frameworks PebbleKit JavaScript Pebble sandbox provides several standard APIs: • HTML5 Geolocation API through navigator.geolocation • Local Storage APIs through window.localStorage
  • 57. New Frameworks PebbleKit JavaScript Your application can show a Configure button on the phone screen When the user clicks on this button, the configure event is fired The html page can return information: document.location.href = “pebblejs:///close#some-data-set” Pebble.addEventListener("showConfiguration", function() { console.log("showing configuration"); Pebble.openURL('http://assets.getpebble.com.s3-website-us-east-1.amazonaws.com/pebble-js/configurable.html'); }); Pebble.addEventListener("webviewclosed", function(e) { console.log("configuration closed"); });
  • 58. New Frameworks PebbleKit JavaScript Expand the reach of your watchapp with JavaScript logic running on the phone Make http calls on the phone, process the reply and send it to your watchapp. Send notification. Use the phone GPS. Use a webview in the phone to provide a configuration screen to your application. Refer to Pebble JavaScript Guide http://developer.getpebble.com/2/guides/javascript-guide.html
  • 60. Updated Tools SDK Overhaul New Frameworks Cloud Pebble App Metadata Event Service pebble Following Standards Accelerometer Developer Connection Events based APIs Data Logging Application logs Dynamic Memory Persistent Storage Documentation 2.0 Migration Guide PebbleKit JS
  • 61. Downloading the new SDK ! Available now on http://developer.getpebble.com/2/