I have been playing with Rob Rohan's Neuromancer "system" since he  
first posted several weeks ago.

Rob's system is much more than a chat app -- though a chat really shows  
it off.

I wanted to do some PIA (Robs acronym for Poor Internet/Interface  
Application) apps where data exchange speed between the host and client  
is very important.

To do this I wrote some CFCs to handle the server-side, the web  
service,  and to implement a function that we call "Thin Arrays".
The Thin Array functions take a CF  query or CF  array and converts it  
into a streamlined packet that defines the data and structure in a  
single string.
This Thin Array contains very little non-data overhead and can be sent  
to the client, quickly with minimal bandwidth usage (and very few  
processing cycles to serialize/de-serialize at either end) .

Rob wrote the complementary js routines at the client & incorporated  
them into Neuromancer. -- they are lean and wicked-fast.

What Rob does in effect, is retrieve and replicate the equivalent of  
the server-side query or array  on the client.  Then he provides a set  
of functions to manipulate the client copy of the data structure.

Rob uses the Thin Array format to retrieve the chat messages  (a db  
query on the server) to his chat program on the client... yes his chat  
logs every message to a database on the host.

To illustrate other uses of Robs system and Thin Arrays, I have written  
2 programs to illustrate how (part of) a drill down might look:

1) EmployeeDrillDownPreload.cfm --

When the initial page is downloaded it includes a table that displays  
the first 5 records of n records in the query. When the page initially  
loads, it requests the entire query (15 rows in our example) and builds  
the equivalent structure on the client.  The user can next/prev page  
thru these records 5 at a time without any interaction with the host.

2) EmployeeDrillDownOnDemand.cfm --

Same as above except only the 1st 5 records are retrieved on page load.  
  Each next/prev request retrieves the desired set of 5 records from the  
server.

This shows how fast Robs system can consume a web service and how  
efficiently thin arrays can be used to exchange data.

The meagre documentation on thin arrays  is included as comments in the  
cfBAM,cfc  -- available for download at Robs site.

http://www.rohanclan.com/products/neuromancer/

The 2 apps above are also available for download -- or if you'd just  
like to see PIAs in action go to the following links:

Note: both of these apps have an initial 2-second delay to cover  
connection to, and learning of, the remote web service -- I didn't have  
a js "Loading..." routine handy.
So, after the page loads, wait a few seconds until a value appears in  
the elapsed time box.

http://www.rohanclan.com/products/neuromancer/datatest/
EmployeeDrillDownPreload.cfm

and

http://www.rohanclan.com/products/neuromancer/datatest/
EmployeeDrillDownOnDemand.cfm

You might want to bring these 2 apps up side-by-side for camparison.

And be sure to visit Rob's PIA chat at:

http://www.rohanclan.com/products/neuromancer/chatdemo2.cfm

I hope you like what you see -- we are quite happy with  it!

BTW, the Employees database is the cfSnippets db that comes with CFMX.   
So if you installed the CFMX examples you can run these apps without  
change

For the techies out there, Rob has added a new feature called  
synch/asynch.  This allows the client-side app to tradeoff performance  
against losing some data packets sent from the host*.  Things like the  
drill downs will likely operate synch  mode so no data packets are lost  
and, because these are UI event driven, there will be no noticeable  
affect on client performance.

* Actually, only packets in transit are lost --the original data  
remains intact on the host  (and client) for retransmission or  
synchronization.

There is a class of apps, however, likes chats, status monitors, etc,  
where the data is constantly updated and a few lost data packets are  
tolerable -- the next data update will replace them anyway.  So  
Neuromancer allows you to run this portion of your app with separate UI  
threads and data exchange threads -- the UI doesn't need to wait for  
the data exchange and vise versa.  This provides a significant  
improvement in performance and a much crisper feel for the UI, with a  
tolerable loss of a few data packets,

The synch/asynch feature allows you, the developer, to optimize the  
performance of the UI (and data exchange) according to the needs of  
each specfic app.

The entire package is free, open source and available for download at:

Enjoy!

Dick

On Mar 31, 2004, at 8:21 AM, Rob wrote:

> On Wed, 2004-03-31 at 04:59, Whittingham, P wrote:
>  > Rob,
>  >��
>  >���I like your code alot. Does it works with a cfm template?
>  You mean instead of a web service? I don't think it would becuase what
>  it does is makes a _javascript_ object that matches a web service, you
>  then use that javascritpt object locally... however, you *could* use  
> the
>  Neuromacer libraries to call cfm pages by hand.
>
>  > If not, I could extend its capability. Do you think it could work a
>  > different web service (ie., .NET, Oracle)??
>  In theory would work with any web service. I only have access to cfmx  
> so
>  I have gotten it to pass stuff pretty well with cfmx, but it is using
>  SOAP to do the transfers so it should work (or will work with a bit of
>  fiddling)
>
>  Cheers Patrick,
>  --
>  Rob <[EMAIL PROTECTED]>
>
[Todays Threads] [This Message] [Subscription] [Fast Unsubscribe] [User Settings]

Reply via email to