SlideShare a Scribd company logo
Start to Finish:
Porting to BlackBerry 10 Native
Aaron Ardiri

Senior Technical Evangelist
aardiri@rim.com

twitter: @ardiri
Getting Started
BlackBerry Dev Zone: You’ll find everything you need

developer.blackberry.com

2
Getting Started

3
Getting Started

4
Getting Started

5
Getting Started
5 Easy Steps!

Download the Native SDK
developer.blackberry.com/native

Register for Signing Keys
Run the getting started wizard


Window -> Preferences -> BlackBerry
Sets up your environment, keys, debug token

Create your application and deploy it to your device
Publish to AppWorld™ - make money!
6
Source

7
So; how was it done?
Porting 101 – the textbook guide
application anatomy (mainline, event loop et al)
identify a way to debug/handle logging of the application
play nice with the navigator/user experience of the platform
create a framebuffer object for graphics
create a PCM audio callback system for music and sound effects
create a handler for input events like touch and keyboard
create a resource manager for preferences, game assets
create bindings to system resources (memory, time, files, networking)
8
:: application anatomy
#include <stdio.h>
#include <stdlib.h>
int
main(intargc, char **argv)
{
fprintf(stdout, “Hello World!n”);
return EXIT_SUCCESS;
}

9
:: application anatomy - BPS
The BlackBerry Platform Services (BPS) library
provides an application with a single consistent
interface to a number of different services.
-

event loop
input/output (sensors, audio, LED, screen, multimedia)
device information
payment services
network status and geo-location
10
:: application anatomy - a real “main()”
int
main(intargc, char **argv)
{
if (application_initialize())
{
application_eventloop();
application_terminate();
}
return EXIT_SUCCESS;
}
11
:: application anatomy – event handling
event_bps = NULL;
bps_get_event(&event_bps, timeout); // -1, forever
if (event_bps != NULL)
{
event_domain = bps_event_get_domain(event_bps);
if (event_domain == navigator_get_domain())
{
// request the event id in the navigator domain
e_id = bps_event_get_code(event_bps);
}
}

12
:: debugging/logging
The BlackBerry 10 Platform logs all stdout
messages to the application sandbox
fprintf(stdout, “[INFO] my log linen”);
fflush(stdout);
to view the contents of the log – SSH into the device/simulator:
$ cd /accounts/1000/appdata/com.xxx.yyy/logs
$ cat log
13
:: play nice with navigator/UX
The BlackBerry Platform Services (BPS) library
issues navigator events applications should handle:
navigator_request_events(0); // request events
NAVIGATOR_EXIT
NAVIGATOR_SWIPE_DOWN
NAVIGATOR_ORIENTATION_CHECK
NAVIGATOR_WINDOW_STATE
- fullscreen, thumbnail, invisible
14
:: play nice with navigator/UX
event_domain :: navigator_get_domain()
switch (e_id)
{
case NAVIGATOR_EXIT:
// user has requested we exit the application
running = 0;
break;

15
:: play nice with navigator/UX
event_domain :: navigator_get_domain()
switch (e_id)
{
case NAVIGATOR_WINDOW_STATE:
switch (navigator_event_get_window_state(event_bps))
{
case NAVIGATOR_WINDOW_FULLSCREEN:
case NAVIGATOR_WINDOW_THUMBNAIL:
case NAVIGATOR_WINDOW_INVISIBLE:
break;
16
:: create a framebuffer (gfx)
The BlackBerry 10 platform provides a composited
windowing API (low level) – which allows the
creation of a pixmap (framebuffer) for graphics.
screen_create_context(..);
screen_create_window(..);
screen_set_window_property_iv(..)
screen_create_window_buffers(..);

17
:: create a pcm audio callback
The BlackBerry 10 platform provides an ALSA
compliant audio library for capturing and playback
of digital audio stream handling
snd_pcm_open_preferred(..);
snd_pcm_plugin_params(..);
snd_pcm_plugin_prepare(..);
snd_pcm_plugin_write(..);

18
:: create a handler for touch, key
screen_request_events(..);
then capture the appropriate screen related events (pointer, touch, key)
SCREEN_EVENT_POINTER
SCREEN_EVENT_MTOUCH_TOUCH
SCREEN_EVENT_MTOUCH_MOVE
SCREEN_EVENT_MTOUCH_RELEASE
SCREEN_EVENT_KEYBOARD

19
:: create a handler for touch, key
event_domain :: screen_get_domain()
// obtain the screen event from the abstract bps event
event_scr= screen_event_get_event(event_bps);

// obtain the event id in the screen domain
screen_get_event_property_iv(event_scr,
SCREEN_PROPERTY_TYPE, &e_id);

20
:: create a handler for touch, key
event_domain :: screen_get_domain()
switch (e_id)
{
case SCREEN_EVENT_POINTER:
// obtain the position and mouse button state
screen_get_event_property_iv(event_scr,
SCREEN_PROPERTY_SOURCE_POSITION,pos);
screen_get_event_property_iv(event_scr,
SCREEN_PROPERTY_BUTTONS, &state);

21
:: create a handler for touch, key
event_domain :: screen_get_domain()
switch (e_id)
{
case SCREEN_EVENT_MTOUCH_TOUCH:
// get the information about the touch event
screen_get_mtouch_event(event_scr, &event_mt, 0);

id = event_touch.contact_id;
x = event_touch.x;
y = event_touch.y; // obtain the (x,y) position
22
:: create a handler for touch, key
event_domain :: screen_get_domain()
switch (e_id)
{
case SCREEN_EVENT_KEYBOARD:
// get the information about the keyboard event
screen_get_event_property_iv(event_scr,
SCREEN_PROPERTY_KEY_FLAGS, &state);
if ((state & (KEY_DOWN || KEY_REPEAT)) != 0)
screen_get_event_property_iv(event_scr,
SCREEN_PROPERTY_KEY_SYM, &key);
23
:: resource manager for assets
Each app is confined to it’s own sandbox


Only your app has read/write access to it’s sandbox

$(SANDBOX)/
$(SANDBOX)/app
$(SANDBOX)/data
$(SANDBOX)/temp
$(SANDBOX)/logs
$(SANDBOX)/shared
24
:: resource manager for assets
#define MAX_PATH_LENGTH 256
{

char sandbox[MAX_PATH_LENGTH];
char path[MAX_PATH_LENGTH];
getcwd(sandbox, MAX_PATH_LENGTH);
sprintf(path, "%s/data/preferences.dat", sandbox);
}

Then use POSIX file functions to read/write the contents of the file.
25
:: generate bindings to system
The BlackBerry 10 platform provides a vast number of POSIX
compliant C libraries that can be used as-is when the
appropriate BlackBerry Platform Services API doesn’t exist.
pthread, strings, math, timers, memory, file io etc

A number of open-source libraries are also available for use
openAL, openSSL, SQLite, zlib, libxml2, freetype
26
:: building the basics – main.c

DEMO
… tv static (with white noise) …
edit - compile – deploy – debug – run
(command line tools)
27
:: migration to SHARK

DEMO
… cronk / caveman HD …
edit - compile – deploy – debug – run
(command line tools)
28
Destination

29
:: next steps - extend

30
:: next steps – open source

blackberry.github.org
31
QUESTIONS
contact me for the “tv static” application sources
THANK YOU
Aaron Ardiri

Senior Technical Evangelist
aardiri@rim.com

More Related Content

Similar to Start to Finish: Porting to BlackBerry 10

Bringing the Open Web & APIs to 
mobile devices with Firefox OS - GOTO confer...
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - GOTO confer...Bringing the Open Web & APIs to 
mobile devices with Firefox OS - GOTO confer...
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - GOTO confer...
Robert Nyman
 
Firefox OS, the Open Web & WebAPIs - HTML5DevConf, San Francisco
Firefox OS, the Open Web & WebAPIs - HTML5DevConf, San FranciscoFirefox OS, the Open Web & WebAPIs - HTML5DevConf, San Francisco
Firefox OS, the Open Web & WebAPIs - HTML5DevConf, San Francisco
Robert Nyman
 
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - BrazilJS
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - BrazilJSBringing the Open Web & APIs to 
mobile devices with Firefox OS - BrazilJS
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - BrazilJS
Robert Nyman
 
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - SpainJS
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - SpainJSBringing the Open Web & APIs to 
mobile devices with Firefox OS - SpainJS
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - SpainJS
Robert Nyman
 
Firefox OS, the Open Web & WebAPIs - Geek Meet Västerås
Firefox OS, the Open Web & WebAPIs - Geek Meet VästeråsFirefox OS, the Open Web & WebAPIs - Geek Meet Västerås
Firefox OS, the Open Web & WebAPIs - Geek Meet Västerås
Robert Nyman
 
What Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 AppsWhat Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 Apps
Doris Chen
 
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W... 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
Robert Nyman
 
How to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NETHow to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NET
Ozeki Informatics Ltd.
 
Android Things
Android ThingsAndroid Things
Android Things
Egor Andreevich
 
HTML5 WebWorks
HTML5 WebWorksHTML5 WebWorks
HTML5 WebWorks
Raul Jimenez
 
Introduction to BlackBerry 10 NDK for Game Developers.
Introduction to BlackBerry 10 NDK for Game Developers.Introduction to BlackBerry 10 NDK for Game Developers.
Introduction to BlackBerry 10 NDK for Game Developers.
ardiri
 
Android Froyo
Android FroyoAndroid Froyo
Android Froyo
Robert Cooper
 
WebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla LondonWebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla London
Robert Nyman
 
WebAPIs & WebRTC - Spotify/sthlm.js
WebAPIs & WebRTC - Spotify/sthlm.jsWebAPIs & WebRTC - Spotify/sthlm.js
WebAPIs & WebRTC - Spotify/sthlm.js
Robert Nyman
 
Web versus Native: round 1!
Web versus Native: round 1!Web versus Native: round 1!
Web versus Native: round 1!
Chris Mills
 
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Vincenzo Iozzo
 
Linux mouse
Linux mouseLinux mouse
Linux mouse
sean chen
 
Fiware IoT Proposal & Community
Fiware IoT Proposal & Community Fiware IoT Proposal & Community
Fiware IoT Proposal & Community
TIDChile
 
Criando jogos para o windows 8
Criando jogos para o windows 8Criando jogos para o windows 8
Criando jogos para o windows 8
José Farias
 
Virus Bulletin 2015: Exposing Gatekeeper
Virus Bulletin 2015: Exposing GatekeeperVirus Bulletin 2015: Exposing Gatekeeper
Virus Bulletin 2015: Exposing Gatekeeper
Synack
 

Similar to Start to Finish: Porting to BlackBerry 10 (20)

Bringing the Open Web & APIs to 
mobile devices with Firefox OS - GOTO confer...
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - GOTO confer...Bringing the Open Web & APIs to 
mobile devices with Firefox OS - GOTO confer...
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - GOTO confer...
 
Firefox OS, the Open Web & WebAPIs - HTML5DevConf, San Francisco
Firefox OS, the Open Web & WebAPIs - HTML5DevConf, San FranciscoFirefox OS, the Open Web & WebAPIs - HTML5DevConf, San Francisco
Firefox OS, the Open Web & WebAPIs - HTML5DevConf, San Francisco
 
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - BrazilJS
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - BrazilJSBringing the Open Web & APIs to 
mobile devices with Firefox OS - BrazilJS
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - BrazilJS
 
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - SpainJS
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - SpainJSBringing the Open Web & APIs to 
mobile devices with Firefox OS - SpainJS
Bringing the Open Web & APIs to 
mobile devices with Firefox OS - SpainJS
 
Firefox OS, the Open Web & WebAPIs - Geek Meet Västerås
Firefox OS, the Open Web & WebAPIs - Geek Meet VästeråsFirefox OS, the Open Web & WebAPIs - Geek Meet Västerås
Firefox OS, the Open Web & WebAPIs - Geek Meet Västerås
 
What Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 AppsWhat Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 Apps
 
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W... 	Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
Bringing the open web and APIs to mobile devices with Firefox OS - Whisky W...
 
How to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NETHow to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NET
 
Android Things
Android ThingsAndroid Things
Android Things
 
HTML5 WebWorks
HTML5 WebWorksHTML5 WebWorks
HTML5 WebWorks
 
Introduction to BlackBerry 10 NDK for Game Developers.
Introduction to BlackBerry 10 NDK for Game Developers.Introduction to BlackBerry 10 NDK for Game Developers.
Introduction to BlackBerry 10 NDK for Game Developers.
 
Android Froyo
Android FroyoAndroid Froyo
Android Froyo
 
WebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla LondonWebAPIs & Apps - Mozilla London
WebAPIs & Apps - Mozilla London
 
WebAPIs & WebRTC - Spotify/sthlm.js
WebAPIs & WebRTC - Spotify/sthlm.jsWebAPIs & WebRTC - Spotify/sthlm.js
WebAPIs & WebRTC - Spotify/sthlm.js
 
Web versus Native: round 1!
Web versus Native: round 1!Web versus Native: round 1!
Web versus Native: round 1!
 
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
Post Exploitation Bliss: Loading Meterpreter on a Factory iPhone, Black Hat U...
 
Linux mouse
Linux mouseLinux mouse
Linux mouse
 
Fiware IoT Proposal & Community
Fiware IoT Proposal & Community Fiware IoT Proposal & Community
Fiware IoT Proposal & Community
 
Criando jogos para o windows 8
Criando jogos para o windows 8Criando jogos para o windows 8
Criando jogos para o windows 8
 
Virus Bulletin 2015: Exposing Gatekeeper
Virus Bulletin 2015: Exposing GatekeeperVirus Bulletin 2015: Exposing Gatekeeper
Virus Bulletin 2015: Exposing Gatekeeper
 

More from ardiri

20180517 Oraclecode Shenzhen Keynote
20180517 Oraclecode Shenzhen Keynote20180517 Oraclecode Shenzhen Keynote
20180517 Oraclecode Shenzhen Keynote
ardiri
 
20180517 OracleCode Singapore Keynote
20180517 OracleCode Singapore Keynote20180517 OracleCode Singapore Keynote
20180517 OracleCode Singapore Keynote
ardiri
 
Feasibility of Security in Micro-Controllers
Feasibility of Security in Micro-ControllersFeasibility of Security in Micro-Controllers
Feasibility of Security in Micro-Controllers
ardiri
 
Introduction to the Internet of Things
Introduction to the Internet of ThingsIntroduction to the Internet of Things
Introduction to the Internet of Things
ardiri
 
Native Application (C/C++) on BlackBerry 10
Native Application (C/C++) on BlackBerry 10Native Application (C/C++) on BlackBerry 10
Native Application (C/C++) on BlackBerry 10
ardiri
 
iPhone Introduction
iPhone IntroductioniPhone Introduction
iPhone Introduction
ardiri
 
Game Development using SDL and the PDK
Game Development using SDL and the PDK Game Development using SDL and the PDK
Game Development using SDL and the PDK
ardiri
 

More from ardiri (7)

20180517 Oraclecode Shenzhen Keynote
20180517 Oraclecode Shenzhen Keynote20180517 Oraclecode Shenzhen Keynote
20180517 Oraclecode Shenzhen Keynote
 
20180517 OracleCode Singapore Keynote
20180517 OracleCode Singapore Keynote20180517 OracleCode Singapore Keynote
20180517 OracleCode Singapore Keynote
 
Feasibility of Security in Micro-Controllers
Feasibility of Security in Micro-ControllersFeasibility of Security in Micro-Controllers
Feasibility of Security in Micro-Controllers
 
Introduction to the Internet of Things
Introduction to the Internet of ThingsIntroduction to the Internet of Things
Introduction to the Internet of Things
 
Native Application (C/C++) on BlackBerry 10
Native Application (C/C++) on BlackBerry 10Native Application (C/C++) on BlackBerry 10
Native Application (C/C++) on BlackBerry 10
 
iPhone Introduction
iPhone IntroductioniPhone Introduction
iPhone Introduction
 
Game Development using SDL and the PDK
Game Development using SDL and the PDK Game Development using SDL and the PDK
Game Development using SDL and the PDK
 

Recently uploaded

Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 
Azure API Management to expose backend services securely
Azure API Management to expose backend services securelyAzure API Management to expose backend services securely
Azure API Management to expose backend services securely
Dinusha Kumarasiri
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Wask
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
AWS Cloud Cost Optimization Presentation.pptx
AWS Cloud Cost Optimization Presentation.pptxAWS Cloud Cost Optimization Presentation.pptx
AWS Cloud Cost Optimization Presentation.pptx
HarisZaheer8
 
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
alexjohnson7307
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Jeffrey Haguewood
 
FREE A4 Cyber Security Awareness Posters-Social Engineering part 3
FREE A4 Cyber Security Awareness  Posters-Social Engineering part 3FREE A4 Cyber Security Awareness  Posters-Social Engineering part 3
FREE A4 Cyber Security Awareness Posters-Social Engineering part 3
Data Hops
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - HiikeSystem Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
Hiike
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Alpen-Adria-Universität
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
Edge AI and Vision Alliance
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 

Recently uploaded (20)

Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 
Azure API Management to expose backend services securely
Azure API Management to expose backend services securelyAzure API Management to expose backend services securely
Azure API Management to expose backend services securely
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
AWS Cloud Cost Optimization Presentation.pptx
AWS Cloud Cost Optimization Presentation.pptxAWS Cloud Cost Optimization Presentation.pptx
AWS Cloud Cost Optimization Presentation.pptx
 
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
 
FREE A4 Cyber Security Awareness Posters-Social Engineering part 3
FREE A4 Cyber Security Awareness  Posters-Social Engineering part 3FREE A4 Cyber Security Awareness  Posters-Social Engineering part 3
FREE A4 Cyber Security Awareness Posters-Social Engineering part 3
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - HiikeSystem Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 

Start to Finish: Porting to BlackBerry 10

  • 1. Start to Finish: Porting to BlackBerry 10 Native Aaron Ardiri Senior Technical Evangelist aardiri@rim.com twitter: @ardiri
  • 2. Getting Started BlackBerry Dev Zone: You’ll find everything you need developer.blackberry.com 2
  • 6. Getting Started 5 Easy Steps! Download the Native SDK developer.blackberry.com/native Register for Signing Keys Run the getting started wizard  Window -> Preferences -> BlackBerry Sets up your environment, keys, debug token Create your application and deploy it to your device Publish to AppWorld™ - make money! 6
  • 8. So; how was it done? Porting 101 – the textbook guide application anatomy (mainline, event loop et al) identify a way to debug/handle logging of the application play nice with the navigator/user experience of the platform create a framebuffer object for graphics create a PCM audio callback system for music and sound effects create a handler for input events like touch and keyboard create a resource manager for preferences, game assets create bindings to system resources (memory, time, files, networking) 8
  • 9. :: application anatomy #include <stdio.h> #include <stdlib.h> int main(intargc, char **argv) { fprintf(stdout, “Hello World!n”); return EXIT_SUCCESS; } 9
  • 10. :: application anatomy - BPS The BlackBerry Platform Services (BPS) library provides an application with a single consistent interface to a number of different services. - event loop input/output (sensors, audio, LED, screen, multimedia) device information payment services network status and geo-location 10
  • 11. :: application anatomy - a real “main()” int main(intargc, char **argv) { if (application_initialize()) { application_eventloop(); application_terminate(); } return EXIT_SUCCESS; } 11
  • 12. :: application anatomy – event handling event_bps = NULL; bps_get_event(&event_bps, timeout); // -1, forever if (event_bps != NULL) { event_domain = bps_event_get_domain(event_bps); if (event_domain == navigator_get_domain()) { // request the event id in the navigator domain e_id = bps_event_get_code(event_bps); } } 12
  • 13. :: debugging/logging The BlackBerry 10 Platform logs all stdout messages to the application sandbox fprintf(stdout, “[INFO] my log linen”); fflush(stdout); to view the contents of the log – SSH into the device/simulator: $ cd /accounts/1000/appdata/com.xxx.yyy/logs $ cat log 13
  • 14. :: play nice with navigator/UX The BlackBerry Platform Services (BPS) library issues navigator events applications should handle: navigator_request_events(0); // request events NAVIGATOR_EXIT NAVIGATOR_SWIPE_DOWN NAVIGATOR_ORIENTATION_CHECK NAVIGATOR_WINDOW_STATE - fullscreen, thumbnail, invisible 14
  • 15. :: play nice with navigator/UX event_domain :: navigator_get_domain() switch (e_id) { case NAVIGATOR_EXIT: // user has requested we exit the application running = 0; break; 15
  • 16. :: play nice with navigator/UX event_domain :: navigator_get_domain() switch (e_id) { case NAVIGATOR_WINDOW_STATE: switch (navigator_event_get_window_state(event_bps)) { case NAVIGATOR_WINDOW_FULLSCREEN: case NAVIGATOR_WINDOW_THUMBNAIL: case NAVIGATOR_WINDOW_INVISIBLE: break; 16
  • 17. :: create a framebuffer (gfx) The BlackBerry 10 platform provides a composited windowing API (low level) – which allows the creation of a pixmap (framebuffer) for graphics. screen_create_context(..); screen_create_window(..); screen_set_window_property_iv(..) screen_create_window_buffers(..); 17
  • 18. :: create a pcm audio callback The BlackBerry 10 platform provides an ALSA compliant audio library for capturing and playback of digital audio stream handling snd_pcm_open_preferred(..); snd_pcm_plugin_params(..); snd_pcm_plugin_prepare(..); snd_pcm_plugin_write(..); 18
  • 19. :: create a handler for touch, key screen_request_events(..); then capture the appropriate screen related events (pointer, touch, key) SCREEN_EVENT_POINTER SCREEN_EVENT_MTOUCH_TOUCH SCREEN_EVENT_MTOUCH_MOVE SCREEN_EVENT_MTOUCH_RELEASE SCREEN_EVENT_KEYBOARD 19
  • 20. :: create a handler for touch, key event_domain :: screen_get_domain() // obtain the screen event from the abstract bps event event_scr= screen_event_get_event(event_bps); // obtain the event id in the screen domain screen_get_event_property_iv(event_scr, SCREEN_PROPERTY_TYPE, &e_id); 20
  • 21. :: create a handler for touch, key event_domain :: screen_get_domain() switch (e_id) { case SCREEN_EVENT_POINTER: // obtain the position and mouse button state screen_get_event_property_iv(event_scr, SCREEN_PROPERTY_SOURCE_POSITION,pos); screen_get_event_property_iv(event_scr, SCREEN_PROPERTY_BUTTONS, &state); 21
  • 22. :: create a handler for touch, key event_domain :: screen_get_domain() switch (e_id) { case SCREEN_EVENT_MTOUCH_TOUCH: // get the information about the touch event screen_get_mtouch_event(event_scr, &event_mt, 0); id = event_touch.contact_id; x = event_touch.x; y = event_touch.y; // obtain the (x,y) position 22
  • 23. :: create a handler for touch, key event_domain :: screen_get_domain() switch (e_id) { case SCREEN_EVENT_KEYBOARD: // get the information about the keyboard event screen_get_event_property_iv(event_scr, SCREEN_PROPERTY_KEY_FLAGS, &state); if ((state & (KEY_DOWN || KEY_REPEAT)) != 0) screen_get_event_property_iv(event_scr, SCREEN_PROPERTY_KEY_SYM, &key); 23
  • 24. :: resource manager for assets Each app is confined to it’s own sandbox  Only your app has read/write access to it’s sandbox $(SANDBOX)/ $(SANDBOX)/app $(SANDBOX)/data $(SANDBOX)/temp $(SANDBOX)/logs $(SANDBOX)/shared 24
  • 25. :: resource manager for assets #define MAX_PATH_LENGTH 256 { char sandbox[MAX_PATH_LENGTH]; char path[MAX_PATH_LENGTH]; getcwd(sandbox, MAX_PATH_LENGTH); sprintf(path, "%s/data/preferences.dat", sandbox); } Then use POSIX file functions to read/write the contents of the file. 25
  • 26. :: generate bindings to system The BlackBerry 10 platform provides a vast number of POSIX compliant C libraries that can be used as-is when the appropriate BlackBerry Platform Services API doesn’t exist. pthread, strings, math, timers, memory, file io etc A number of open-source libraries are also available for use openAL, openSSL, SQLite, zlib, libxml2, freetype 26
  • 27. :: building the basics – main.c DEMO … tv static (with white noise) … edit - compile – deploy – debug – run (command line tools) 27
  • 28. :: migration to SHARK DEMO … cronk / caveman HD … edit - compile – deploy – debug – run (command line tools) 28
  • 30. :: next steps - extend 30
  • 31. :: next steps – open source blackberry.github.org 31
  • 32. QUESTIONS contact me for the “tv static” application sources
  • 33. THANK YOU Aaron Ardiri Senior Technical Evangelist aardiri@rim.com

Editor's Notes

  1. Need to shrink the long URLs or remove one of them. DRC is almost empty, but also almost impossible to find
  2. Need to shrink the long URLs or remove one of them. DRC is almost empty, but also almost impossible to find
  3. Should we have a bunch of screen shots walking through this?