Introduction
Nodes is a working name. Previous name was Javascript OS.
Web browser based operating system, for developing rich HTML5 client-side applications.
Web application server for storing and serving rich HTML5 client-side applications and data.
Based on object programming and JavaScript. Loose ancient crap (yes unix, you). Browser does a lot of stuff very well already.
Linux shell and Gtk suck. It is better to use web as a framework.
Provide infrastructure to do difficult things easily.
Ideas:
- easy to use Javascript object persistence that just works
- URLs instead of file paths! (metadata about URLs can be nicely stored in RDF!)
- persistent objects are uniquely identified with URLs. (like http://page_address#object_dom_id or something)
- handle synchronizing of of data between same object instanced in different browsers on different hosts.
- each web page (URL) on a server is a workspace, which can contain javascript applets. Applets are javascript objects (classes), which get (re)instantiated automatically, when workspace is reloaded.
- a set of standard subclassable UI objects for creating applications
- use some kind of RDF model for storage; protocol for talking to a web server in RDF/JSON; see also: MyRDF
References:
- Squeak
- Hypercard
- UIKit
- Dashboard
- Visual basic
- OS/2 Workplace Shell
Use cases
- WDBI next generation
- HTML Puppet Theatre
- Project management: file and clipboard sharing over the web
- Wiki improvement project
- Translation application
Applets
- text command console
- object inspector
- css editor (which can save changes!)
- web browser (with sticky notes you can attach to pages)
- text editor (rich text!)
- image viewer/editor
- object browser (with search!) - like file manager, but more general, for javascript objects etc...
- chat between users visiting the page
Loginout
- user_register(username,email,password)
- user_login(username,password)
- user_logout()
- user_change_password(old_password,new_password)
- user_reset_password(new_password) // need mail cookie
- user_enable_account() // needs mail cookie
- user_forgot_username(email)
- user_forgot_password(email)
- user_delete_account(sure?)
Functional parts
- javascript libraries on other client stuff
- RDF data store
- content server (simple one included, one should be able to use 3rd party CMS, MediaWiki or drupal for example)
- file server (for handling uploading and serving big files, etc...)
Model
- obj = base object
- shell = initial object (shell, object browser)
- app = base object for apps
- note = a simple persistent text field
- run = a very simple application runner
- chat = a simple, but nice chat (not ported yet)
<graphviz> digraph a {
rankdir = LR node [shape="box"] object view controller model mapper moc view window app shell applet
edge [arrowhead="empty"] model -> object; view -> object; controller -> object; window -> view; moc -> controller;
app -> controller mapper -> controller; shell -> app;
edge [arrowhead="vee"] moc -> model; view -> DOMelement object -> mapper mapper -> moc app -> window
}
</graphviz>