(If this is tl;dr, just go to http://urdesk.net right now)

What does it mean for something to be "a good node client"?

When I think of a client for node.js, I think of a dynamic user experience 
that doesn't really require any page refreshes, and that stirs up a whole 
bunch of good feelings as regards what is possible on the web. 

I started thinking about web programming in the mid-2011 time frame. I 
wanted to see how far I could push the concept of a dynamic user 
experience. Fast forward to February 10, 2014 (today), and I think that my 
original vision has finally come to fruition. Starting in September 2012, I 
began working on the current incarnation. My idea was to go "all in" by way 
of seeing if I could duplicate the OS X end user experience inside of a web 
browser... all courtesy of Google's V8 JS engine running inside of standard 
Chrome.   Since that time, I've put in about a full year's worth of 8-12 
hour coding days. Here is the basic setup: 

There is a core desktop module that performs all of the essential system 
level operations: window, icon, context menu, menubar, and toolbar GUI 
operations, as well as all of the interactions with Local Storage and the 
filesystem API. 

There are several self-contained modules of which the core has no knowledge 
that plug into the system through a basic interface.  The most important of 
these modules are the Unix-style text editor (called Nanim) and the 
command-line interface.  There are other, graphical modules that I've spent 
relatively small amounts of time developing, such as a media player and a 
prototype-phase word processor. 

There are several ways of thinking about the system.  Most obviously, I 
think that it pushes the envelope in terms of how we understand the notion 
of an operating system.  Such a thing has traditionally been written in 
native code, and has required a fairly sizeable cost to download, install, 
replace, etc.  (What I mainly mean by "cost" is NOT the purchase price, but 
rather the potential for catastrophe if the installation procedures are not 
followed precisely.  So by this definition, we can judge the commercial 
OSes to be much cheaper that all of the Linux distributions that require 
one to do things such as partition hard drives and install custom boot 
loaders to try them out.) 

We can call the OS that I've developed a trivially loadable/bootable OS. 
The only investment that it currently requires comes in the form of 
accepting the browser's "this site wants to permanently store data on your 
computer" prompt, and then waiting the minute or so for all of the 
resources to download. After that, everything is served locally, meaning 
that a network connection is not necessary for it to load. Furthermore, 
given that all of the locally stored data is essentially namespaced by the 
domain name, one can have many OS environments running alongside each other 
in different tabs of the same browser, with the caveat that each tab is 
must use a different subdomain (this just means that all of the resources 
owned by www.urdesk.net essentially live in a sandboxe, safely hidden away 
from, eg. dev.urdesk.net... or any other subdomain of urdesk.net). 

In this way, there is essentially zero cost involved when it comes to 
experimenting with a new OS, and trying out all of the different 
applications contained within it. Application developers will be able to 
write their logic without having to worry about distribution problems, 
given that it will be guaranteed to run on any Chrome browser, thereby 
eliminating all issues related to downloading (and the related issue of 
viruses), plugin-installing, flag-enabling, etc. 

The next level of thinking about the system is that the applications are 
not traditional "applications" in the sense that they run as different 
native processes, and thereby keep their data structures in mutually 
exclusive address spaces. In this system, there are precisely zero issues 
of interprocess communication (IPC). All "applications" are actually just 
JavaScript function objects that collectively inhabit a single browser tab 
address space. All complications traditionally related to IPC now become 
null and void. Given this fact, the possibilities in terms of the 
development of a holistic kind of user experience increase profoundly. (As 
a trivial example of this, imagine your calendar app being aware of what 
you are typing into your word processor and adjusting itself according.) 

And finally, this system allows for the emergence of a fundamentally new 
paradigm in terms of how we relate to our computers.  I have actually had a 
much longer history developing AI-type command-and-response systems than I 
have had developing user interfaces.  Within the command-line interface, 
there is a working prototype of a natural language REPL (read/eval/print 
loop) that accepts the kind of syntax that the most naive of end users 
would not find intimidating in the least.  You must understand that I have 
never had any interest in developing things that are known as "chatterbots" 
for the purpose of fooling anyone about anything (ie, passing a Turing 
test).  My interest has always been the creation of what amounts to a VHLPL 
(very high level programming language)... or put differently, a structured/ 
formalized subset of natural languages (such as English) that can be used 
as a working interfaces into the logical circuitry of one's personal 
computing device. 

The essential aspect of this final point is not ultimately the nature of 
the algorithms that relate directly to something we might call "natural 
language understanding". (Fundamentally, I think that this kind of 
progamming is fairly straight-forward, with the major caveat being that any 
sufficiently advanced AI requires a simply massive amount of said 
programming.) It is rather that the world is in need of a generally 
available "AI friendly" development environment in order for any 
economically sustainable AI project to get off the ground. In other words, 
I find it to be fairly obvious that such a project must be truly global and 
distributed in nature, rather that being the product of a centralized 
organization with a definite political heirarchy. 

If we look at the recent efforts of IBM to create "intelligent" machines 
(Deep Blue in the domain of chess; Watson in the domain of publicly 
available general human knowledge), we can see that there was really no 
effort to develop a general interface to give average end users the ability 
to leverage the power of the microprocessors and the flexiblity of the 
programmable circuitry in their computers. Those were all exercises in: 
"Look how smart WE are, ma! Aren't you proud?" 

So, while there may indeed be an average public awareness that there are 
"intelligent machines" that exist in the various research labs of the 
various suburbs of the SF Bay area, there is most certainly not any such 
awareness of the existence of any generally available, highly intuitive 
interfaces that will allow them to get along with the business of their 
daily lives with any more ease. 

Please give the site @ http://urdesk.net a test drive and tell me what you 
think.  I will get deeper into how the system can be used later on...

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to nodejs@googlegroups.com
To unsubscribe from this group, send email to
nodejs+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nodejs+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to