You are on page 1of 22

Desktop Applications

Using HTML and JavaScript (and Python and Ruby)

Jeff Haynie
@jhaynie
JEFF HAYNIE

CEO, Appcelerator
Open Source Developer

Twitter: jhaynie
Blog: blog.jeffhaynie.us
Why?

Why would I want to build a desktop application


instead of a web application?
The experience

For the same reasons you’re building a mobile


application instead of running it in the browser
on the device
The user experience
The experience is richer

Drag and Drop Filesystem

Notifications
True offline

Backgrounding

App-to-app interaction
The interaction

Desktop applications typically have deeper


interaction and user affinity
Desktop Development
Windows: Win32 API, MFC, AFC, .NET
Macintosh: Cocoa, Carbon
Linux: GTK+

Cross-platform toolkits:
Java Swing, Eclipse SWT, Mono, GTK+

Adobe AIR *
Why web technologies?
Speed (and thus, cost) of development
Lots of people know them Why not?

Great tooling
Lots of libraries
HTML/CSS are good enough for UI
Plenty of online resources, training
Mix of great languages: JavaScript, Python, Ruby
Appcelerator Titanium
• Open source SDK, Tools (Apache)
• Cross-platform (Win32, OSX, Linux)
• Based on WebKit
• Modular and extensible
• Supports JavaScript, Python, Ruby
(more coming)

• http://github.com/marshall/titanium
What about AIR?
• Adobe AIR is a great product
• Different architecture
• Not open source
• Very strong (and rigid) security model
• Mature
• Requires Flash
• Requires pre-installed Runtime
Desktop API
• Filesystem - read, write
• Process - start/stop/control
• UI - menus, trays, drag-drop, etc
• Media - sound, video, camera, mic
• Database - online, offline
• Notifications - user notifications
• Network - robust access and protocols
Titanium Architecture
X495)
G"/22) *22#"1/04.)
T<F) >$'B45A)#4/=)89.0($)
UG<F) /.=)<4=9#$%)"S).4')#41/#) >$')
6V) W44')
,.%'/##$5)
CVV) <4=9#$)
</."S$%') V'/5')*22#"1/04.)4.1$)89.0($) F$K$.=)
/.=)<4=9#$%)25$%$.') 5$Y9"5$=)
4204./#)
*11$%%)(4=9#$%)7"/)6VL)89:&)/.=)+&';4.)

G"'/."9()89.0($)/.=)<4=9#$%)

6/7/%15"2') +#/345() -,) <$="/) +541$%%) C9%'4()P)

89:&) !"#$%&%'$() *22) >40?1/04.) >$'B45A) C9%'4()Q)

+&';4.) *+,) *./#&01%) @$%A'42) <4.A$&) C9%'4()R)

C4((4.)D:E$1')F/&$5) G;"5=H2/5'&)F":5/5"$%))I$JKJL)M$:N"'O)
Kroll microkernel
• Cross-platform C++
• Small boot kernel which dynamically loads
modules
• Cross-language, in-process binding
technology (C++, JS, Ruby, Python)
• All APIs in Titanium are kroll modules
• Separate Github open source project:
• http://github.com/jhaynie/kroll
You focus on app
• We’ll focus on complexities of packaging,
installation, updating, analytics, etc
• Apps are packaging in a cross-platform
specific manner
• Developers control their packaging
• Apps look and feel “native”
Your happy place
• You can use your-favorite-javascript-
framework
• JQuery, Dojo, Mootools, Prototype, etc.
• Capuccino, ExtJS, Entourage, etc.
• Import existing modules/gems (Py/Ruby)
• Even Flash/Flex, Silverlight (and maybe Java/
Java FX)
HTML 5 ++
• Database support (we also have Sync DB
API)
• CSS animation, transitions, gradients
• Custom CSS scrollbars
• Web workers
• Custom Fonts (@font-face)
• SVG
Titanium Apps
• Focus on writing HTML/JavaScript etc
which runs natively on the desktop
machine
• Resources are bundled with application and
are local (but can remotely use resources)
• No cross-domain restrictions (except
remote resources origin touching Titanium)
• Benefit from shared runtime
Supports Flash, Silverlight and other plugins
Performance
• Titanium runs on various architectures
(Intel, PPC, 32-bit, 64-bit)
• Running on EFIKA 5200 B (PPC 128MB)
• http://www.genesi-usa.com/efika
• Yahoo Sideline port uses 1/4 memory of
AIR app
• Pandora AIR app pegs CPU at 100%,
Titanium 8-10%
Demo

• It’s usually easier to demonstrate


Where to get it?

• Download:
• http://titaniumapp.com/download
• Currently Preview Release 3
• Beta coming very soon
Please talk to me

• Looking for feedback, input and help


• jeff@appcelerator.com
• @jhaynie
• #titanium_app on irc.freenode.net
Big Thanks!

• Thanks to Jonathan Snook for demo code


and inspiration
• http://snook.ca
• @snookca