(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.