"Dont call us. We call you!". Strictly publish/subscribe based mechanisms at work.
6 | Stay in sync when states or methods gets added, removed or changed.
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/images/ic_attachment_48px.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/images/ic_memory_48px.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/images/ic_search_48px.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/images/ic_autorenew_48px.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/images/ic_public_48px.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/images/HTML5_Badge.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/_includes/footer.html:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/_plugins/markdown.rb:
--------------------------------------------------------------------------------
1 | =begin
2 | Jekyll tag to include Markdown text from _includes directory preprocessing with Liquid.
3 | Usage:
4 | {% markdown %}
5 | Dependency:
6 | - kramdown
7 | =end
8 | module Jekyll
9 | class MarkdownTag < Liquid::Tag
10 | def initialize(tag_name, text, tokens)
11 | super
12 | @text = text.strip
13 | end
14 | require "kramdown"
15 | def render(context)
16 | tmpl = File.read File.join Dir.pwd, "_includes", @text
17 | site = context.registers[:site]
18 | tmpl = (Liquid::Template.parse tmpl).render site.site_payload
19 | html = Kramdown::Document.new(tmpl).to_html
20 | end
21 | end
22 | end
23 | Liquid::Template.register_tag('markdown', Jekyll::MarkdownTag)
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Jet
2 |
3 | The JSON Bus.
4 |
5 | This is the website project for [Jet](http://jetbus.io).
6 |
7 | If you are looking for language implementations, you may be interested in:
8 |
9 | - Node.js and Browser Implementation [node-jet](http://github.com/lipp/node-jet) (Daemon and Peer)
10 | - Lua Implementation [lua-jet](http://github.com/lipp/lua-jet) (Daemon and Peer)
11 | - Arduino Implementation [Arduino-Jet](http://github.com/lipp/Arduino-Jet) (Peer)
12 |
13 | # Contribute
14 |
15 | Everybody is very welcomed to contribute. If you have:
16 |
17 | - Bugs to report
18 | - Ideas for improvements
19 | - Questions to the Protocol
20 | - Usage Feedback
21 |
22 | Please create an issue or - even better - fork and make a Pull Request.
23 |
24 | # License
25 |
26 | MIT.
27 |
--------------------------------------------------------------------------------
/_includes/head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Jet
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Resources
4 | order: 4
5 | ---
6 |
7 | # Further Readings
8 |
9 | Please checkout the following links to get started with Jet.
10 |
11 | - [Javascript Implementation](https://github.com/lipp/node-jet) For Browser and Node.js
12 | - [redux-jet](https://github.com/lipp/redux-jet) A [redux](http://redux.js.org/) adapter to integrate with [React](https://facebook.github.io/react/) or similar
13 | - [Protocol Specification](https://github.com/lipp/jet-protocol) All the details
14 | - [Radar](https://github.com/lipp/radar) Inspect and play with your Jet instance
15 |
16 | # Examples
17 |
18 | Have a look at the examples to get started.
19 |
20 | - [Todo App](https://todos.now.sh) A collaborative version in 200 lines of code powered by [Next.js](https://github.com/zeit/next.js)
21 | - [Chat App](https://chatty.now.sh) Simple chat application
22 |
--------------------------------------------------------------------------------
/_plugins/jade.rb:
--------------------------------------------------------------------------------
1 | ##
2 | ## This Plugin enables Jade support to pages and posts.
3 | ##
4 |
5 | require 'open3'
6 |
7 | module Jekyll
8 |
9 | class JadeConverter < Converter
10 |
11 | def matches(ext)
12 | ext =~ /^\.jade$/i
13 | end
14 |
15 | def output_ext(ext)
16 | ".html"
17 | end
18 |
19 | def convert(content)
20 | begin
21 | o, e, s = Open3.capture3("jade", :stdin_data => content)
22 | puts(<<-eos
23 | Jade Error >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
24 | #{e}
25 | <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Jade Error
26 | eos
27 | ) if e.length > 0
28 | rescue Errno::ENOENT => e
29 | puts "** ERROR: Jade isn't installed or could not be found."
30 | puts "** ERROR: To install with NPM run: npm install jade -g"
31 | return nil
32 | end
33 | return o
34 | end
35 |
36 | end
37 |
38 | end
39 |
--------------------------------------------------------------------------------
/images/github.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/_includes/daemon.html:
--------------------------------------------------------------------------------
1 |
Aka Master. The Daemon is the center of communications as all Peers connect to it. When
8 | Peers communicate with each other, the Daemon handles the message routing.
9 | All the heavy-lifting like filtering and sorting happens inside the daemon. Most likely the Daemon
10 | runs on the same machine as your webserver, but just could run anywhere else!
11 |
12 |
13 | The Daemon itself does not provide any content at all, but provides means for content
14 | registration. Technically the inner wirings maybe described as a publish-subscribe engine with built-in
15 | content cache.
16 |
Build Realtime Apps now! Jet is a framework for building distributed realtime
8 | Apps. It employs fast push technologies
9 | and differential updates to keep all clients in sync.
10 | It is very easy to use and features powerful query filters, sorting rules and
11 | a Web Inspector, called Radar.
12 |
13 |
Jet has been designed for IoT
14 | , Games, Collaborative Apps or anything else where things are in flux and fast
15 | communication is required.
16 | Its efficient design allows Jet Daemons to run very nicely on systems with
17 | rather limited ressources like the RaspberryPi. Jet Peers can even run on Arduino!
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2012, 2013, 2014 by Gerhard Preuss
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/_includes/bus.html:
--------------------------------------------------------------------------------
1 |
Besides its web-capable realtime characteristics, Jet is intended to be
8 | a system bus for Linux, Windows or OSX.
9 | Much like the widely used Dbus, Jet allows distribution of system services
10 | to muliple processes using a simple API.
11 | All your Jet content is available for Browsers instantly!
12 |
13 |
14 | As Browsers can host first class Peers, they can even provide content themselfes!
15 |
16 |
17 | Jet allows to wait for content to become available and thus helps in the upstart
18 | phase of interdependent services and helps decoupling parts of complex systems.
19 |
Aka Service. An action identified by a unique name (path) which can be executed by other Peers.
8 | Methods can have any number and any type of parameters.
9 | Peers can add Methods to the Jet Bus by registrating them to the Daemon.
10 | Unlike States, Methods have no associated value.
11 | Methods are subject to fetching and thus are observable by other Peers.
12 |
13 |
14 | A method may do just anything. It could light an LED, create States
15 | (e.g. "todo/add") or
16 | perform a system update.
17 | However, it should not behave like classical "getter/setter" as States
18 | are intended for this purpose.
19 |
Aka Client. Peers can provide and/or consume content. They have to connect to a
8 | Daemon to be part of the Jet bus. To provide content Peers can register States and/or Methods.
9 | Consuming content means either fetching, calling or
10 | setting States/Methods.
11 |
12 |
13 | Peers can run on the same machine as the Daemon or on remote machines, possibly within Browsers.
14 | A common usage scenario is that the Peers running on the same machine as the Daemon
15 | provide content (as the Todo-Server)
16 | and other Peers consume this content from a Browser (as the
17 | Todo-Client).
18 |
Aka Document. A logical piece of information (value), identified by a unique name (path).
8 | A State's value can be of any Javascript type: primitive types, nested Objects or Arrays.
9 | Peers can add States to the Jet Bus by registrating them to the Daemon.
10 | States may change its value spontaneously or on behalf of another Peer.
11 | They are subject to fetching and thus are observable by other Peers.
12 |
13 |
14 | States may represent things like user records, CPU temperature
15 | or network settings. The Peer adding the State defines the
16 | behaviour when a set request comes in and is free to do anything
17 | that is appropriate.
18 | If necessary the requested value maybe adapted, interpolated or refused.
19 |
Jet is free for all! And of course, everything is open source.
10 | Beside the Javascript implementation for HTML5 and Node.js, there
11 | libs available for Lua and Arduino.
12 |
Jet is meant for Self-hosting.
13 | Intergration is very easy as Jet servers can run side-by-side with
14 | your webserver environment or fully integrate with your Node.js based solutions if desired.
15 | Jet services are fully customizable and allow features like server-side validation,
16 | live push-data, custom factories or custom services.
17 |
Aka Query. Fetching is the process of continuously gathering information.
9 | Peers can fetch to obtain content from a Daemon, which in turn is provided by Peers.
10 | This is much like a database query as you can exactly define what content you want
11 | based on name (path) and/or values of States and Methods.
12 | The Jet Daemon can also sort and paginate your data based on State values.
13 |
14 |
15 | The best thing is, that the content gets updated as soon as something relevant
16 | concerning your fetch rule changes: new content gets added or removed, values changed.
17 |
18 |
19 | Imagine a score board, which should display the female top ten players ordered
20 | by their score, which gets updated automatically as players score.
21 | With Jet this is piece of cake!
22 |
14 | § 1 Haftungsbeschränkung
15 | Die Inhalte dieser Website werden mit größtmöglicher Sorgfalt erstellt. Der
16 | Anbieter übernimmt jedoch keine Gewähr für die Richtigkeit, Vollständigkeit
17 | und Aktualität der bereitgestellten Inhalte. Die Nutzung der Inhalte der
18 | Website erfolgt auf eigene Gefahr des Nutzers. Namentlich gekennzeichnete
19 | Beiträge geben die Meinung des jeweiligen Autors und nicht immer die Meinung
20 | des Anbieters wieder. Mit der reinen Nutzung der Website des Anbieters kommt
21 | keinerlei Vertragsverhältnis zwischen dem Nutzer und dem Anbieter zustande.
22 |
23 | § 2 Externe Links
24 | Diese Website enthält Verknüpfungen zu Websites Dritter ("externe Links").
25 | Diese Websites unterliegen der Haftung der jeweiligen Betreiber. Der
26 | Anbieter hat bei der erstmaligen Verknüpfung der externen Links die fremden
27 | Inhalte daraufhin überprüft, ob etwaige Rechtsverstöße bestehen. Zu dem
28 | Zeitpunkt waren keine Rechtsverstöße ersichtlich. Der Anbieter hat keinerlei
29 | Einfluss auf die aktuelle und zukünftige Gestaltung und auf die Inhalte der
30 | verknüpften Seiten. Das Setzen von externen Links bedeutet nicht, dass sich
31 | der Anbieter die hinter dem Verweis oder Link liegenden Inhalte zu Eigen
32 | macht. Eine ständige Kontrolle der externen Links ist für den Anbieter ohne
33 | konkrete Hinweise auf Rechtsverstöße nicht zumutbar. Bei Kenntnis von
34 | Rechtsverstößen werden jedoch derartige externe Links unverzüglich gelöscht.
35 |
36 | § 3 Urheber- und Leistungsschutzrechte
37 | Die auf dieser Website veröffentlichten Inhalte unterliegen dem deutschen
38 | Urheber- und Leistungsschutzrecht. Jede vom deutschen Urheber- und
39 | Leistungsschutzrecht nicht zugelassene Verwertung bedarf der vorherigen
40 | schriftlichen Zustimmung des Anbieters oder jeweiligen Rechteinhabers. Dies
41 | gilt insbesondere für Vervielfältigung, Bearbeitung, Übersetzung,
42 | Einspeicherung, Verarbeitung bzw. Wiedergabe von Inhalten in Datenbanken
43 | oder anderen elektronischen Medien und Systemen. Inhalte und Rechte Dritter
44 | sind dabei als solche gekennzeichnet. Die unerlaubte Vervielfältigung oder
45 | Weitergabe einzelner Inhalte oder kompletter Seiten ist nicht gestattet und
46 | strafbar. Lediglich die Herstellung von Kopien und Downloads für den
47 | persönlichen, privaten und nicht kommerziellen Gebrauch ist erlaubt.
48 |
49 | Die Darstellung dieser Website in fremden Frames ist nur mit schriftlicher
50 | Erlaubnis zulässig.
51 |
52 | § 4 Besondere Nutzungsbedingungen
53 | Soweit besondere Bedingungen für einzelne Nutzungen dieser Website von den
54 | vorgenannten Paragraphen abweichen, wird an entsprechender Stelle
55 | ausdrücklich darauf hingewiesen. In diesem Falle gelten im jeweiligen
56 | Einzelfall die besonderen Nutzungsbedingungen.
Datenschutzerklärung für den Webanalysedienst Google Analytics
57 | Diese Website benutzt Google Analytics, einen Webanalysedienst der Google Inc. ("Google"). Google Analytics verwendet sog. "Cookies", Textdateien, die auf Ihrem Computer gespeichert werden und die eine Analyse der Benutzung der Website durch Sie ermöglichen. Die durch den Cookie erzeugten Informationen über Ihre Benutzung dieser Website werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert. Wir haben die IP-Anonymisierung aktiviert. Auf dieser Webseite wird Ihre IP-Adresse von Google daher innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum zuvor gekürzt. Nur in Ausnahmefällen wird die volle IP-Adresse an einen Server von Google in den USA übertragen und dort gekürzt. Im Auftrag des Betreibers dieser Website wird Google diese Informationen benutzen, um Ihre Nutzung der Website auszuwerten, um Reports über die Websiteaktivitäten zusammenzustellen und um weitere mit der Websitenutzung und der Internetnutzung verbundene Dienstleistungen gegenüber dem Websitebetreiber zu erbringen. Die im Rahmen von Google Analytics von Ihrem Browser übermittelte IP-Adresse wird nicht mit anderen Daten von Google zusammengeführt. Sie können die Speicherung der Cookies durch eine entsprechende Einstellung Ihrer Browser-Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden nutzen können. Sie können darüber hinaus die Erfassung der durch das Cookie erzeugten und auf Ihre Nutzung der Website bezogenen Daten (inkl. Ihrer IP-Adresse) an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem sie das unter dem folgenden Link verfügbare Browser-Plugin herunterladen und installieren: http://tools.google.com/dlpage/gaoptout?hl=de
Datenschutzerklärung für die Nutzung von dem Webmessagedienst twitter.com
58 | Wir haben auf unserer Webseite auch den Webmessagedienst twitter.com integriert. Dieser wird durch die Twitter Inc., 1355 Market St, Suite 900, San Francisco, CA 94103, USA bereitgestellt. Twitter bietet die sog. „Tweet“ – Funktion an. Damit kann man 140 Zeichen lange Nachrichten auch mit Webseitenlinks in seinem eigenen Twitteraccount veröffentlichen. Wenn Sie die „Tweet“-Funktion von Twitter auf unseren Webseiten nutzen, wird die jeweilige Webseite mit Ihrem Account auf Twitter verknüpft und dort ggf. öffentlich bekannt gegeben. Hierbei werden auch Daten an Twitter übertragen.
59 | Von dem Inhalt der übermittelten Daten und deren Nutzung durch Twitter erhalten wir keine Kenntnis. Konsultieren Sie daher für weitere Informationen die Datenschutzerklärung von Twitter: http://twitter.com/privacy
60 | Twitter bietet Ihnen unter nachfolgendem Link die Möglichkeit, Ihre Datenschutzeinstellungen selbst festzulegen: http://twitter.com/account/settings.