javascript in linux desktop (icos ver.)

67

Upload: yuren-ju

Post on 12-May-2015

2.236 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Javascript in linux desktop (ICOS ver.)
Page 2: Javascript in linux desktop (ICOS ver.)

Javascript in Linux Desktop

Yuren Ju <[email protected]>

Page 3: Javascript in linux desktop (ICOS ver.)

Yuren Ju

● Use Linux: 9 years● For Desktop: 78 years

Red Hat

Debian

Gentoo

Debian

UbuntuArch Linux Debian

Page 4: Javascript in linux desktop (ICOS ver.)

Yuren Ju

● Blog: Yuren's Info Area● Email: [email protected]● 社群

● Hacking Thursday, KaLUG

● 工作: ASUSTek

Page 5: Javascript in linux desktop (ICOS ver.)

Javascript always use in Web Applications.

Page 6: Javascript in linux desktop (ICOS ver.)

Javascript always use in Web Applications.

Page 7: Javascript in linux desktop (ICOS ver.)

Javascript in Linux Desktop

● Web Application/Platform● Desktop Platform● Desktop Application

Page 8: Javascript in linux desktop (ICOS ver.)

Internet

ApplicationPlatform

Page 9: Javascript in linux desktop (ICOS ver.)

Performance

Page 10: Javascript in linux desktop (ICOS ver.)

Opportunity!

Javascript for Web Application Desktop Application

Page 11: Javascript in linux desktop (ICOS ver.)

?Javascript in desktop

● Integration● Layout/Style

Page 12: Javascript in linux desktop (ICOS ver.)

Application

Platform

Web Desktop

Page 13: Javascript in linux desktop (ICOS ver.)

Web Application

JSHTML+CSS CSS

Layout Style Programming

Server side

Page 14: Javascript in linux desktop (ICOS ver.)

Platform/Browser

JSHTML+CSS CSS

Layout Style Programming

Layout engine Javascript engine

Page 15: Javascript in linux desktop (ICOS ver.)

Platform/Browser (2)

Firefox Chrome

Layout engine Gecko Webkit

Javascript engine SpiderMonkey V8

Page 16: Javascript in linux desktop (ICOS ver.)

To Desktop Application

Page 17: Javascript in linux desktop (ICOS ver.)

Desktop  Platform

● XULRunner (Mozilla platform)● GNOME Javascript runtime

● GJS/Seed

Page 18: Javascript in linux desktop (ICOS ver.)

XULRunner

Programming in Web Browser!

Page 19: Javascript in linux desktop (ICOS ver.)

Mozilla applications

Page 20: Javascript in linux desktop (ICOS ver.)

XULRunner

JSCSS

Layout Style Programming

Gecko layout engine SpiderMonkey

XUL

DOM

Demo: http://www.hevanet.com/acorbin/xul/top.xul 

Page 21: Javascript in linux desktop (ICOS ver.)

XUL?  又一個新標記語言?Try...

Page 22: Javascript in linux desktop (ICOS ver.)

Mozilla Platform  integration

Mozilla Application

System

XPCOM/NPAPI C++/Javascript

Page 23: Javascript in linux desktop (ICOS ver.)

Mozilla Platform  integration

DBUS VTE

notifyGlade

GTK

Page 24: Javascript in linux desktop (ICOS ver.)

But!

Page 25: Javascript in linux desktop (ICOS ver.)

Tomorrow!

Page 26: Javascript in linux desktop (ICOS ver.)

Javascript in GNOME

● Seed● based on WebKit's JavaScriptCore

● GJS● based on Mozilla's Spidermonkey engine

Page 27: Javascript in linux desktop (ICOS ver.)

XULRunner

JSCSS

Layout Style Programming

Gecko layout engine SpiderMonkey

XUL

Page 28: Javascript in linux desktop (ICOS ver.)

Javascript in GNOME

JSLayout Style

Programming

GObject introspection Seed/GJS

Systemlibrary

Page 29: Javascript in linux desktop (ICOS ver.)

Javascript in GNOME

Javascript engine

Javascript desktop runtime

Javascript application

System library

C API: GTK, Gstreamer,Clutter, Glib, etc.

GObjectintrospection

JavascriptCore/SpiderMonkey

Seed/GJS

Page 30: Javascript in linux desktop (ICOS ver.)

GObject Introspection usage 

● const Gtk = imports.gi.Gtk;● var window = new Gtk.Window ();

Page 31: Javascript in linux desktop (ICOS ver.)

GObject Introspection

Page 32: Javascript in linux desktop (ICOS ver.)

<JS>

new!

Language for GNOME

Page 33: Javascript in linux desktop (ICOS ver.)

Traditional arch.

Native C API

GStreamer

Python/Perl/Ruby/Java..., etc.

VTE notifyGTK Clutter

Page 34: Javascript in linux desktop (ICOS ver.)

GObject Introspection

Native C API

GI

JS Java Python Perl Ruby PHP?

GStreamerVTE notifyGTK Clutter

Page 35: Javascript in linux desktop (ICOS ver.)

Metadatausing annotations in the comments

Page 36: Javascript in linux desktop (ICOS ver.)

GObject Introspection

Page 37: Javascript in linux desktop (ICOS ver.)

girscanner

40 B2 02 00 10 B2........

gircompilertypelib

Gir xml file

Annotations

Page 38: Javascript in linux desktop (ICOS ver.)

GObject Introspectionfoo.cfoo.hLibrary source, with type annotations

Foo.girXML file

Foo.typelibBinary file

libgirepository.so

Specific language bindings

libfoo.so

libffi.so

Page 39: Javascript in linux desktop (ICOS ver.)

C API: gtk_button_set_label

● java: button.setLabel("foo")● javascript/python/vala: button.set_label("foo")● perl: $button>set_label("foo")● scheme: (send button (setlabel "foo"))

Page 40: Javascript in linux desktop (ICOS ver.)

GObject Introspection

Native C API

GI

JS Java Python Perl Ruby PHP?

GStreamerVTE notifyGTK Clutter

Page 41: Javascript in linux desktop (ICOS ver.)

Seed/GJS

DBUS VTE

notifyGlade

GTK

$ aptitude search gir

Page 42: Javascript in linux desktop (ICOS ver.)

Javascript  已經準備好了!

Page 43: Javascript in linux desktop (ICOS ver.)

Hello world

Page 44: Javascript in linux desktop (ICOS ver.)

Hello world (2)

Page 45: Javascript in linux desktop (ICOS ver.)

Demo  jsgallery

Page 46: Javascript in linux desktop (ICOS ver.)

Applications based on Seed

● Seed● Swellfoop● lightsoff

Page 47: Javascript in linux desktop (ICOS ver.)

Seed/GJS cons

● Your javascript just like another scripting language (e.g. python)

Page 48: Javascript in linux desktop (ICOS ver.)

Web developer: ☹

Page 49: Javascript in linux desktop (ICOS ver.)

if...

Page 50: Javascript in linux desktop (ICOS ver.)

Web developer: ☺

Page 51: Javascript in linux desktop (ICOS ver.)

Seedkit

● Define your UI in webstandards, use your GObjects

● inspired by WebOS SDK and Mozilla JetPack● http://live.gnome.org/SeedKit 

Page 52: Javascript in linux desktop (ICOS ver.)

Seedkit Demo

Page 53: Javascript in linux desktop (ICOS ver.)

Use library

● dbus● libnotify● wnck

Source:Html  http://gist.github.com/578919 Js  http://gist.github.com/578922 

Page 54: Javascript in linux desktop (ICOS ver.)

Cons

● Highly dependency ● Hard to Communicate with main statement● Poor documentation

Page 55: Javascript in linux desktop (ICOS ver.)

gnomeshell

● Use javascript to control your desktop

file:///usr/share/gnomeshell/js/ui 

Page 56: Javascript in linux desktop (ICOS ver.)

Making extension – just like Firefox!

gnomeshell createextension

Page 57: Javascript in linux desktop (ICOS ver.)

Demo – gnomeshell extension

Page 58: Javascript in linux desktop (ICOS ver.)

Javascript in Linux Desktop

● Apps based on javascript● Powerful extension system with js● Simple coding● http://live.gnome.org/JavaScript 

Page 59: Javascript in linux desktop (ICOS ver.)

ENDThank you!

Page 60: Javascript in linux desktop (ICOS ver.)

But I have..., why GI?

● Pythongtk● Rubygnome2● javagnome

● e.g. nautilus● No python, ruby, java 

binding...

Page 61: Javascript in linux desktop (ICOS ver.)

Layout/Theme

● GTK – gtkthemeengine● Gnomeshell (shell toolkit) – libcroco (CSS)● MX toolkit – CSS

Page 62: Javascript in linux desktop (ICOS ver.)

GJS vs seed

● EMCAScript support● GJS support javascript 1.8.1 extensions● Seed support javascript 1.5● for each, let, etc.● [item * 2 for each (item in list)]

Page 63: Javascript in linux desktop (ICOS ver.)

Return values

● GJS● print (texture.get_base_size());

● Seed● var height = {}, width = {};● texture.get_base_size (width, height);● print (“width: ” + width.value + “, height: “ + 

height.value)

Page 64: Javascript in linux desktop (ICOS ver.)

Clutter fine tune

● GJS● No Actor.animate function

● Seed● workaround for Actor.animate● But seed2.28/2.30 use different event mapping

Page 65: Javascript in linux desktop (ICOS ver.)

Signal

● GJS● actor.connect ("signalname", callback)

● Seed● actor.signal["signalname"].connect (callback)● actor.signal.destroy.connect (callback)

Page 66: Javascript in linux desktop (ICOS ver.)

Presentation License

CC Attribution 3.0 Unportedhttp://creativecommons.org/licenses/by/3.0/

Page 67: Javascript in linux desktop (ICOS ver.)

Images License

Creative Commons (AttributionShare Alike 3.0 Unported)http://www.iconfinder.com/search/?q=iconset:sketchy http://www.iconfinder.com/search/?q=iconset:49handdrawing