Društvo LJUDMILA
Rozmanova ulica 12
1000 Ljubljana
Slovenia
Prostori: osmo/za

Nodes

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

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>