Re: Making the move...

2006-03-31 Thread Dan Shafer
I agree. Useful discussion for things I'm thinking hard about these days as
I move away from Ruby on Rails and look for Rev-centric approaches to the
software projects I want to build.



On 3/28/06, Sivakatirswami [EMAIL PROTECTED] wrote:

I mean if  the SSI ! include exec some rev.cgi. returns data to the
HTML page instead of an HTML chunk, then you have the separation
between views and data  you describe, n'est pas? No?

In the simplistic case, this is probably true. Where it breaks down is where
we are retrieving data from a database (or for that matter from some other
form of persistent storage) on the server and we need to create tables of
dynamic data in the web page, for example. This requires the use of an
iterator that encloses HTML formatting something like this:

% order_line.line_items.each do |li| %
  div class=olitem
span class=olitemqty%= li.quantity %/span
span class=olitemtitle%= li.product.title %/span
  /div
% end %

The coder (developer) builds this construct and the HTML designer creates
the definitions for the classes that define how s/he wants that kind of data
displayed. But it's the iterator (the each do operation) that makes this
possible. To make this happen with an SSI would, I think, be much more
complicated if in fact it could be implemented at all.

I think what I'm coming to is that an MVC framework, properly implemented,
creates as nearly as possible a complete severance between content and
presentation. CSS is one of the ways this is made even more efficient, but
it is really the MVC architecture that provides the necessary support.



--
~~
Dan Shafer, Information Product Consultant and Author
http://www.shafermedia.com
Get my book, Revolution: Software at the Speed of Thought
From http://www.shafermediastore.com/tech_main.html
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-28 Thread Richard Gaskin

Dan Shafer wrote:


Richard

I agree that merge is very cool and quite powerful.

Still, I cannot put into a Web page:

Hello, there. The time is % merge [[the time]] % (regardless of the
dellimiter being used around the call) as I can with Ruby. The merge
operation would, I think, have to be included in the CGI generating the
entire text string above, right? Or am I really missing something obvious
here?


The merge function can take any block of text (such as an HTML page, for 
example) and will replace Transcript expressions between [[ and ]] 
with the evaluated result.  You can but any expression or container 
reference between those brackets, including variables, constants, or 
even calls to Transcript functions defined elsewhere, and you can place 
any number of these anywhere in your HTML.


It really is worth devoting a half-hour to playing with.  Merge is one 
of the best things Transcript adopted from SuperTalk (from back in the 
days when Allegiant was pushing a server-side engine).


You can use the merge function in a CGI script, or in HTML templates 
processed by the engine, however you like.  And just like the 
recommended Ruby setup, we have users on this list who set up Rev with 
FastCGI, so performance should be roughly on par with similarly 
configured systems.


With Ruby it's common to create server directives that pass any files 
accessed in specified directories through Ruby on the way out (in 
essence an implied CGI), and I see no reason one couldn't do the same 
for any text processing engine they're using, such as Rev.


So while it seems somewhat magical to use:

   http://www.domain.com/appstuff/

...all that's really happening there is the server is set up to 
interpret that as:


   http://www.domain.com/appStuff/default.rb

Set up similarly, you could just as easily set up the server to have 
implied default pages specified as belonging to Rev, so calling the 
directory above would be interpreted as:


   http://www.domain.com/appStuff/default.revhtml



Again, as I said earlier, this may well be a distinction without a
difference when it comes to accomplishing what I'm pointing out as the main
advantage/feature of an MVC framework for Web development, namely the
(relatively) clean separation between presentation and business logic. I'm
not promoting Ruby, just trying to understand the qualitative difference in
using an embedded scripting language vs. a CGI approach.


Embedded is just how you set up your server to use the text processing 
engine of your choice, be it Ruby or Rev or whatever.  Since Ruby is 
most commonly set up using FastCGI, any distinction between embedded 
and CGI may be too subtle to be instructive.


But when you mention the framework, now you're on to the big difference 
that makes RoR attractive:  Rails already exists, whereas one would need 
to write a well-factored web app framework in Rev to get the same level 
of productivity.


MVC can make a good foundation for such a framework, as can many other 
common patterns.  Anything that separates code, content, and 
presentation is a step in the right direction, esp. if it makes smart 
use of triggers and accessors as MVC and similar patterns do.


As I noted here recently, I'm not yet convinced MVC per se is the best 
fit for Rev.  I'm open to opinions to the contrary, and would enjoy 
learning about successful apps shipped with a Transcript implementation 
of MVC.


Among languages that don't already provide MVC classes, there's much 
debate about how to graft them on.  The more I look into it the more I 
find many different flavors of MVC, MV, and similar factored patterns. 
For example, there's at least one good paper outlining how Apple's MVC 
in Core Data differs from SmallTalk's.  The biggest debates out there 
seems to focus on the scope and role of the Controller (most pretty much 
agree what a Model and a Viewer are), and a few have dropped the 
Controller altogether.


I haven't had enough commercial experience with MVC to have a strong 
opinion about those differences.  But stepping back from other people's 
implementation specifics to focus on the results we're all looking for, 
there are many ways to separate code, content, and presentation with 
Transcript.


Couple that with the high productivity of Transcript's typelessness, 
chunk expressions, and merge function (just to name a few), Rev would 
seem a worthy contender for anything involving a lot of text processing, 
on the desktop or the server.



PS: For a fun take on the flipside of frameworks, this post at Joel is a 
hoot:

http://discuss.joelonsoftware.com/default.asp?joel.3.219431.12

--
 Richard Gaskin
 Managing Editor, revJournal
 ___
 Rev tips, tutorials and more: http://www.revJournal.com
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your 

Re: Making the move...

2006-03-28 Thread Chipp Walters



Richard Gaskin wrote:

PS: For a fun take on the flipside of frameworks, this post at Joel is a 
hoot:

http://discuss.joelonsoftware.com/default.asp?joel.3.219431.12


Ha! Great stuff, really!

Further down the page the author (IMO) does a great job of 
differentiating libraries vs frameworks. He states:


I'd like to address the notion of using a framework vs. rolling your 
own framework.


I think it's a false dichotomy; I don't want to use any framework at all.

I know what several of you are thinking. I'd be out of my mind not to 
use some sort of framework. Am I honestly thinking of writing every 
single line of code that I'll need all on my own?


No, of course not.

What I'd really like to find are some appropriate *libraries* that I can 
use to provide several kinds of functionality for my project. Here's 
what I need:


* A library to use as a templating system for the presentation tier of 
my application. This API should be dirt simple.


* A library to use as a content repository (articles, essays, etc).

* A library providing a user-management API, for creating, editing, and 
deleting users, and assigning them different privileges.


* A library providing a threaded discussion forum API. This code should 
have *no* front-end gui. It should just provide an API of forum-related 
services that I'll need in building my webapp. I'll build my own JSP GUI 
on top of it.


* A library providing multi-user blogging capabilities.

Why is it so difficult to find simple libraries that provide these kinds 
of services?


The distinction between a library and a framework is subtle, but I think 
critical. A library is a collection of code that I don't have to write 
myself. It provides me with a set of objects and methods that I can use 
to build me application. If the library doesn't do quite what I want, I 
can make some small modifications or throw it away and use a different 
library.


A framework, on the other hand, always attempts to redefine the entire 
applilcation architecture. And, if the framework ends up not meeting my 
needs, I need to throw away my entire application, because everything 
I've written is defined in terms of the framework's methodology.


A library is something *contained* within my code.

A framework is a *container* for my application.

Interesting distinction...

-Chipp

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-28 Thread Mark Waddingham

HI Dan,

I think the piece of the puzzle missing here is that of the web- 
server. It is easy to configure Apache (for example) to execute a  
particular program server-side when a page is requested that has a  
specific extension. This program is passed both the requested URL and  
resolved server-side path through the standard CGI environment  
variables PATH_INFO and PATH_TRANSLATED.


For example, when put in the appropriate place something like:
  AddHandler rev_html .revhtml
  Action rev_html /cgi-bin/process_revhtml.cgi
Will tell Apache to execute /cgi-bin/process_revhtml.cgi everytime a  
page with the extension .revhtml is accessed. (I wouldn't be  
surprised if this is how Ruby-on-Rails is actually configured, and is  
certainly how PHP or Perl is configured in some web-hosting  
environments where they didn't want to use mod_perl or mod_php for  
some reason).


The process_revhtml.cgi script can then be something like:

#!  revolution -ui

on startup
  local tInputScript
  put url (file:  $PATH_TRANSLATED) into tInputScript

  local tOutputScript
  put merge(tInputScript) into tOutputScript

  write Content-Type: text/html  return to stdout
  write Context-Length:   the length of tOutputScript  return to  
stdout

  write return to stdout
  write tOutputScript to stdout
end startup

So, a file on the webserver server such as 'current_time.revhtml'  
containing the following:

  html
head
  titleCurrent Server Time/title
/head
body
  The current server time is [[the internet date]]
/body
  /html

Will serve a page saying something like:
  The current server time is Tue, 28 Mar 2006 10:55:01 +

Of course, this is an incredibly simplistic example - but one that  
can be extended in a number of ways. Indeed, from this it is not hard  
to see how you could start to create an entire environment in  
which .revhtml scripts are run giving various features akin to PHP,  
Perl (with all its modules) and Ruby-on-Rails.


Warmest Regards,

Mark.

--
 Mark Waddingham ~ [EMAIL PROTECTED] ~ http://www.runrev.com
   Runtime Revolution ~ User-Centric Development Tools



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-28 Thread Dan Shafer
Some great information in the replies by Richard and Mark Waddingham here.
Rather than quote them and intersperse comments, I thought I'd just make a
point or two in response.

Mark, you're right that the secret sauce here is training the Web server
to route pages to specific processes based on file extensions. So a page
ending in .revhtml or whatever could be mapped to invoke the Rev engine. I
think that installing Ruby and RoR handles that file editing transparently,
so it doesn't appear that there's any magic but there clearly is.

Taking your advice, Richard, I spent another half hour with merge and I
think the light is beginning to dawn for me. Based on my reading of the
(rather sparse) docs, I *assumed* it would not work to try to execute
abritrary code from inside those square brackets (or, as it turns out, using
a return statment in the more conventional ? and ? delimiters, which Rev
also supports). I'm not sure where the limitations are but a bit of
experimenting revealed that I could get the following to work:

put merge (It is now day [[line (dayOfWeek(the time)) of the weekdayNames]]
in Monterey, California) into field htest

Here, dayOfWeek is a function defined in the card script and the
weekdayNames is a built-in system function that returns a list of the names
of the days of the week, one per line. So I successfully executed a custom
function call that used two bulit-in system functions (the time and the
weekdayNames) and it worked.

Clearly, then, I would be able to do this same thing in a .revhtml page on
the server by invoking a Rev script after proper setup as described by Mark.

The possibilities begin to become clearer now. I'm going to putter a bit
more with this and see what I can come up with on my local (OS X Apache) Web
server. I have it on good authority that Andre Garzia is going to have some
very cool stuff along these lines to share with us in Monterey. I can hardly
wait.

Dan
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-28 Thread Sivakatirswami

On Mar 27, 2006, at 8:10 AM, Dan Shafer wrote:


That is where a Web app framework -- like Ruby on Rails, though  
there are
several others worthy of consideration -- shows its strength. By  
adopting
the model-view-controller (MVC) design paradigm, RoR creates an  
effective
split between presentation and logic. The HTML designer works on  
views. The
developer creates Controllers that look to Models for data they  
need to send

to the views and for other logic that affects program execution. That
bifurcation is important on non-trivial applications. A Web app  
framework
that follows the MVC paradigm (or perhaps some other approach that  
provides
the same division of labor) is preferable to CGI-based solutions  
which not
only encourage but demand a mixing of the two somewhat incompatible  
skill

sets.


Dan, this is a good point, in my ignorance I may be making this all  
too simplistic, but is not the bifurcation a design decision?


I mean if  the SSI ! include exec some rev.cgi. returns data to the  
HTML page instead of an HTML chunk, then you have the separation  
between views and data  you describe, n'est pas? No? And if  
Revolution is running as a daemon then even if you had 10 such SSI  
calls in a given web page, I don't see how this would be  
substantially different from having 10 merge statements embed in the  
page ... in fact, if separation between the vehicle (view) and the  
data in it (returned by SSI's) is important on non-trivial  
applications then doesn't putting the  merge statements back into  
the html break that mandate? i.e. Marks solution puts the entire  
burden of the page development on the programmer and the HTML page  
designer is out cold.


I mean doesn't a page like this elaborated to some thing more complex  
and really useful:


html
head
  titleCurrent Server Time/title
/head
body
  The current server time is [[the internet date]]
/body
  /html

take you right back here where you didn't want to be:

This means, e.g., that the person writing the CGI must know HTML  
and the
page design with which the CGI is designed to work. It also means  
that the
HTML designer must typically be given access to the CGI code or, in  
the

alternative, the CGI developer must be asked to hack HTML into the CGI
itself. In both cases, we mix presentation and functionality in a  
way that

is fraught with danger and maintenance issues.


On the other hand, that problem set aside (even though, for me at  
least it *is* a core issue I face on a daily basis)  I guess we can  
see that Marks model is fundamentally different than


html
head
  titleCurrent Server Time/title
/head
body
  The current server time is ! include exec=someRev.cgi
/body
  /html

where -- if you had ten of these includes in the page -- you are  
asking apache to call the CGI ten times.


Yes, I too saw those warnings: But if a majority of your page is  
being generated at the time that it is served, you need to look for
some other solution. But I just ignored them. We were not  
sophisticated enough to do a full on dBase web site and so SSI, was  
our only solution to global maintenance and separation of content  
from the DOM.


And we really don't see any delivery time issues with pages that look  
like the ones below. Of course, it we had super heavy traffic it   
might be different. I'm actually thinking now of changing the entire  
model to using a dBase web site or  XML-XSLT with flat files that  
regenerates the entire web site (or areas) that are 100% static code  
(no SSI's at all in the web pages at all) so then Apache has no work  
to do other than ship bytes. But, until SSI proves itself to be bad,  
and despite warnings I see no problems so far.. we will continue to  
use it. (aside: But what's happening is that the web site is now much  
more than just pages, it is an historical resource and in its present  
form, inaccessible. WE sell rights to some of the data engine  
companies, meanwhile we ourselves we don't even have a decent index.  
so I want to recast the content in a way that will make it much more  
useful... but I don't really know what direction to go in...)


This is an excellent discussion, I find one of our regular  
challenges is how to open up channels to engage more people in the  
process of web content distribution, where the wiki and blog  
model is too open ended, and yet you need a UI where people can  
contribute directly. I would concur with Chipp about separating the  
framework and talking in terms of libraries...if you keep mucking  
around changing the framework your productivity will drop through the  
floor. Though my wish list of Libraries might be different, its the  
same need.  A typical real world example could be someone who is  
responsible to inputting textual information (blog if you want to  
call it that, but it could be any kind of web page) and you want that  
to appear on a web page but you need to have 

Re: Making the move...

2006-03-27 Thread Dan Shafer
OK, I've thought about this some more and poked at some of the CGIs you've
developed. The place where this include virtual approach to Web site
design breaks down for me comes at the point where, as I said in my original
definition, we have embedded command and function calls in the underlying
scripting language.

Mind you, I'm not sure this isn't a distinction without a difference, but
that was my intent in my earlier posts. I had, in fact, used SSI with the
include virtual command a very long time ago and had shelved it, though I
am no longer clear on the reason why I chose to do so at the time. Perhaps
there are some downsides to using SSI that I'm forgetting. The Apache site's
discussion of SSI includes this caveat: SSI is a great way to add small
pieces of information, such as the current time. But if a majority of your
page is being generated at the time that it is served, you need to look for
some other solution. Perhaps that or something like it influenced me.

In any case, what is clearly NOT happening with an SSI is the inclusion of
Transcript commands or functions directly in the HTML file from which  the
dynamic page is generated. All of the Transcript code is external to the
page layout/template. The overly simplistic example I provided earlier of
using an embedded call to a built-in Ruby function such as Time.now() is the
key idea here. The call to that function generates NO HTML code, just a
value to be substituted into the HTML page when it's generated by the
server. Using CGI, you can't mix HTML and operational code *in the HTML
template or page*. This means in general that the CGI must generate HTML
blocks to be inserted into the HTML page at generation time on the server.

This means, e.g., that the person writing the CGI must know HTML and the
page design with which the CGI is designed to work. It also means that the
HTML designer must typically be given access to the CGI code or, in the
alternative, the CGI developer must be asked to hack HTML into the CGI
itself. In both cases, we mix presentation and functionality in a way that
is fraught with danger and maintenance issues.

That is where a Web app framework -- like Ruby on Rails, though there are
several others worthy of consideration -- shows its strength. By adopting
the model-view-controller (MVC) design paradigm, RoR creates an effective
split between presentation and logic. The HTML designer works on views. The
developer creates Controllers that look to Models for data they need to send
to the views and for other logic that affects program execution. That
bifurcation is important on non-trivial applications. A Web app framework
that follows the MVC paradigm (or perhaps some other approach that provides
the same division of labor) is preferable to CGI-based solutions which not
only encourage but demand a mixing of the two somewhat incompatible skill
sets.

On 3/25/06, Dan Shafer [EMAIL PROTECTED] wrote:

 Sivakatirswami.

 Wow. I gotta go try this as soon as I finish this talk I'm giving
 tomorrow.

 And please send me those URLs you mentioned offlist. This could be HUGE
 for me. I had no idea this could be done and I don't know why I didn't have
 any idea this could be done.



 On 3/24/06, Sivakatirswami [EMAIL PROTECTED] wrote:
 
 
  Dan, if your definition of a web app really is:
 
a Web *app* consists of a collection of 1 or more
   templates -- HTML files with embedded command and function calls --
   that
   execute in a server-side scripting language interpreter running on the
   server. All Web pages with this embedded script code are run
   through the
   scripting language interpreter on the server, where the command is
   carried
   out and some content is generated to replace the command call
   before the
   page is sent to the HTTP server to return to the client.
 
  We are *already*  doing this with Rev for several years now (and I'm
  pretty sure I'm not the only one, I got into this with Andu Novac
  when this was all metacard years ago... he still around?) and it
  works great, even without fastCGI...the fact that Rev is called on
  each hit doesn't seem to be an issue at all.


 --
 ~~
 Dan Shafer, Information Product Consultant and Author
 http://www.shafermedia.com
 Get my book, Revolution: Software at the Speed of Thought
 From http://www.shafermediastore.com/tech_main.html




--
~~
Dan Shafer, Information Product Consultant and Author
http://www.shafermedia.com
Get my book, Revolution: Software at the Speed of Thought
From http://www.shafermediastore.com/tech_main.html
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-27 Thread Richard Gaskin

Dan Shafer wrote:


In any case, what is clearly NOT happening with an SSI is the inclusion of
Transcript commands or functions directly in the HTML file from which  the
dynamic page is generated. All of the Transcript code is external to the
page layout/template. The overly simplistic example I provided earlier of
using an embedded call to a built-in Ruby function such as Time.now() is the
key idea here. The call to that function generates NO HTML code, just a
value to be substituted into the HTML page when it's generated by the
server. Using CGI, you can't mix HTML and operational code *in the HTML
template or page*. This means in general that the CGI must generate HTML
blocks to be inserted into the HTML page at generation time on the server.


Just as Ruby is used to pre-process pages containing statements like 
time.now, you can use Rev as the preprocessor with its merge function to 
do the same thing:


   The time is [[the time]]

The merge function is very powerful, well worth spending some time with 
if you want to use Rev like Ruby or PHP.


The key thing to keep in mind when implementing a system like this is 
that Ruby is just a text processing engine.  The methods by which it's 
hooked into the server are not unique to that engine, and just about any 
capable text processing engine, such as Rev, can be set up to be used in 
the same way.


--
 Richard Gaskin
 Managing Editor, revJournal
 ___
 Rev tips, tutorials and more: http://www.revJournal.com

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-27 Thread Dan Shafer
Richard

I agree that merge is very cool and quite powerful.

Still, I cannot put into a Web page:

Hello, there. The time is % merge [[the time]] % (regardless of the
dellimiter being used around the call) as I can with Ruby. The merge
operation would, I think, have to be included in the CGI generating the
entire text string above, right? Or am I really missing something obvious
here?

Again, as I said earlier, this may well be a distinction without a
difference when it comes to accomplishing what I'm pointing out as the main
advantage/feature of an MVC framework for Web development, namely the
(relatively) clean separation between presentation and business logic. I'm
not promoting Ruby, just trying to understand the qualitative difference in
using an embedded scripting language vs. a CGI approach.

On 3/27/06, Richard Gaskin [EMAIL PROTECTED] wrote:

 Dan Shafer wrote:

  In any case, what is clearly NOT happening with an SSI is the inclusion
 of
  Transcript commands or functions directly in the HTML file from
 which  the
  dynamic page is generated. All of the Transcript code is external to the
  page layout/template. The overly simplistic example I provided earlier
 of
  using an embedded call to a built-in Ruby function such as Time.now() is
 the
  key idea here. The call to that function generates NO HTML code, just a
  value to be substituted into the HTML page when it's generated by the
  server. Using CGI, you can't mix HTML and operational code *in the HTML
  template or page*. This means in general that the CGI must generate HTML
  blocks to be inserted into the HTML page at generation time on the
 server.

 Just as Ruby is used to pre-process pages containing statements like
 time.now, you can use Rev as the preprocessor with its merge function to
 do the same thing:

 The time is [[the time]]

 The merge function is very powerful, well worth spending some time with
 if you want to use Rev like Ruby or PHP.

 The key thing to keep in mind when implementing a system like this is
 that Ruby is just a text processing engine.  The methods by which it's
 hooked into the server are not unique to that engine, and just about any
 capable text processing engine, such as Rev, can be set up to be used in
 the same way.

 --
   Richard Gaskin
   Managing Editor, revJournal
   ___
   Rev tips, tutorials and more: http://www.revJournal.com

 ___
 use-revolution mailing list
 use-revolution@lists.runrev.com
 Please visit this url to subscribe, unsubscribe and manage your
 subscription preferences:
 http://lists.runrev.com/mailman/listinfo/use-revolution




--
~~
Dan Shafer, Information Product Consultant and Author
http://www.shafermedia.com
Get my book, Revolution: Software at the Speed of Thought
From http://www.shafermediastore.com/tech_main.html
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-25 Thread Dan Shafer
Sivakatirswami.

Wow. I gotta go try this as soon as I finish this talk I'm giving tomorrow.

And please send me those URLs you mentioned offlist. This could be HUGE for
me. I had no idea this could be done and I don't know why I didn't have any
idea this could be done.



On 3/24/06, Sivakatirswami [EMAIL PROTECTED] wrote:


 Dan, if your definition of a web app really is:

   a Web *app* consists of a collection of 1 or more
  templates -- HTML files with embedded command and function calls --
  that
  execute in a server-side scripting language interpreter running on the
  server. All Web pages with this embedded script code are run
  through the
  scripting language interpreter on the server, where the command is
  carried
  out and some content is generated to replace the command call
  before the
  page is sent to the HTTP server to return to the client.

 We are *already*  doing this with Rev for several years now (and I'm
 pretty sure I'm not the only one, I got into this with Andu Novac
 when this was all metacard years ago... he still around?) and it
 works great, even without fastCGI...the fact that Rev is called on
 each hit doesn't seem to be an issue at all.


--
~~
Dan Shafer, Information Product Consultant and Author
http://www.shafermedia.com
Get my book, Revolution: Software at the Speed of Thought
From http://www.shafermediastore.com/tech_main.html
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-24 Thread Jim Ault
On 3/21/06 4:55 PM, Sarah Reichelt [EMAIL PROTECTED] wrote:
 The alternatives that I see are to use script local variables or to
 pass an empty parameter by reference and have the function fill it.
 Does anyone have any other ideas or recommendations?

Here is another way that you could take advantage of 'for each' and use one
function, scanning the database one time, returning multiple results in one
variable, without using an array.

on scan
--define var dbTable
  put dbScanner(dbTable) into dbEssence
  set the itemdel to ^
  put item 1 of dbEssence into summer
  put item 2 of dbEssence  into lister
  put item 3 of dbEssence  into chimps
  
end scan

function dbScanner @dbTable
set the itemDel to tab  --if this is correct
  repeat for each line LNN in dbTable
put ,  item 6 of LNN after itemsToSum
put item 4 of LNN  cr after listofItem4
if LNN contains circus monkey then
  put LNN  cr after monkeyLines
end if
  end repeat
  get sum(itemsToSum)
  filter listofItem4 without empty
  filter monkeyLines without empty
  return it  ^  \
  listofItem4  ^  \
  monkeyLines
  
end dbScanner

Jim Ault
Las Vegas

On 3/21/06 4:55 PM, Sarah Reichelt [EMAIL PROTECTED] wrote:

 On 3/21/06, Geoff Canyon [EMAIL PROTECTED] wrote:
 Do you have an example? I agree that if you end up passing in a
 handful of arguments by reference, you haven't accomplished much by
 breaking out the routine. The question is if there isn't a better way
 to slice the routine, where that wouldn't be necessary.
 
 
 OK, I have a better example. Say I have a data set and I need to loop
 through it and extract three different pieces of information e.g. a
 list of the 4th column in each line, a list of lines that match a
 certain set of criteria, and a cumulative total obtained by adding a
 certain column in each line.
 
 Each of these could be done in a separate function, but that would
 mean looping through the data set three times. With a large data set,
 it is significantly faster to loop once, filling all three new
 variables in the single loop. If I separate this off into a separate
 function, then I need a way of passing multiple results back.
 
 The alternatives that I see are to use script local variables or to
 pass an empty parameter by reference and have the function fill it.
 Does anyone have any other ideas or recommendations?
 
 Sarah
 ___
 use-revolution mailing list
 use-revolution@lists.runrev.com
 Please visit this url to subscribe, unsubscribe and manage your subscription
 preferences:
 http://lists.runrev.com/mailman/listinfo/use-revolution


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-24 Thread Sivakatirswami

On Mar 16, 2006, at 8:13 AM, Richard Gaskin wrote:


I would imagine one could also set up Apache to use Rev for server- 
side includes, using settings similar to what's used for Ruby or PHP.



I'm coming in here late on this but it's of great interest and very  
relevant, because somehow, not really knowing any better I just  
stumbled on this two years ago and now we use SSI's which execute Rev  
CGI's throughout our web site.  yes and  double yes.. works great.  
Assuming you have a Rev Engine installed, CHMOD 755 and other cgi's  
are working. There is no set up required at all for SSI's


 !--#include virtual=/cgi-bin/get_story_listing.cgi --

or iFrame

iframe name=archiveIndex border=0 width=130 height=140 src=/ 
cgi-bin/buildArchivesIndex.cgi


 We do not see *any* slow down. Of course those CGI's are not doing  
anything very complex. Maybe I'm way out of my depth here and what we  
are doing is very baby face compared with the kinds of things you  
are saying RoR can do ...


On Mar 15, 2006, at 3:05 PM, Dan Shafer wrote:

Furthermore, the execution of that CGI script would require an event
to be sent via a form button or a JavaScript onLoad() command; it's  
not just

automatic.


With SSI exec it *is* automatic. I don't see any execution slow down.  
And there is no round trip to the client server client server  that a  
JavaScript onLoad() does (I think)


Dan, if your definition of a web app really is:


 a Web *app* consists of a collection of 1 or more
templates -- HTML files with embedded command and function calls --  
that

execute in a server-side scripting language interpreter running on the
server. All Web pages with this embedded script code are run  
through the
scripting language interpreter on the server, where the command is  
carried
out and some content is generated to replace the command call  
before the

page is sent to the HTTP server to return to the client.


We are *already*  doing this with Rev for several years now (and I'm  
pretty sure I'm not the only one, I got into this with Andu Novac  
when this was all metacard years ago... he still around?) and it  
works great, even without fastCGI...the fact that Rev is called on  
each hit doesn't seem to be an issue at all. Of course my suexec log  
is crazy big and scary for tech support at the data center who threw  
up a Denial of Service Attack Underway-Change Your
Root Password Now! red flag when they looked at it... You mean your  
web pages are calling those CGI's on every hit? Wow, if I tail the  
log those Revolution CGI's are executing every few milliseconds...   
But your site still blazes? Oh boy... I need to set up a cron to  
null that thing once a day! And, if you ssh in and run top.. the CPU  
shows it is still half a sleep... kustum Illai (Tamil) = no problem

===

OK Marty, for us poor we only know xTalk paupers if you are  
lurking... I've put up some CGI's  on our site and sent you the URL  
off list (I don't want to post that on this forum... if anyone else  
wants to see them, ask me off list)


Since I am a coding primitive you should be able to understand it  
all easily enough. In my old age I'm doing more commenting. The model 
(s) is very simple: if the CGI is an SSI then it executes and builds  
parts of the page before the page is sent. Nothing could be simpler.  
This usually involves fetching some template or  code chunks in the  
SSI folder. I always try to avoid hard coding HTML in the CGI and  
almost always externalize even small chunks to small files. this has  
the advantage that you can delegate code maintenance... someone says  
Can I add a new link to the side bar and you say sure.. just add  
an liSome New link/li to this file and they never touch the CGI.


And for icing on the coffee cake, and if you combine Rev cgi with XML  
and XSL you have some really interesting possibilities.


Just go to this page:

http://www.himalayanacademy.com/teaching/stories/

When you hit that page, the page itself re-builds the list of stories  
instantly... there is no round trip before  the page is served.


OK now go here:

http://www.himalayanacademy.com/teaching/stories/enter_stories.shtml

and enter a bogus story (no problem I will delete later, this site is  
not public, I mean it's not linked to any top pages, just put your  
name in there somewhere.)


Now go back to

http://www.himalayanacademy.com/teaching/stories/

and you will see your new story added to the list... click on your  
story.. viola, it comes back to you as a web page...tell me if you  
see the slightest delay in the service. Any PHP doing the same thing  
would be 2 to 5 times slower. I put all the related files to this  
little framework in the folder called stories. and the cgi emails  
me that a story was just entered...


The input page takes form data, the rev CGI grabs an XML template  
pops in the data from the form, saves an XML document that calls an  
XSL stylesheet (that was actually the biggest learning 

Re: Making the move...

2006-03-23 Thread Sivakatirswami
at www.himalayanacademy.com and www.hinduismtoday.com we use *only*  
rev cgi's... and REvo remote clients


But, I have also installed PMwiki which uses PHP.

mod_php is presumably up  and running all the time, but the rev  
engine is being loaded on each instance of a cgi being called.  
Nevertheless I can assure you, the Rev CGI beat the pants off PHP  
And we have some fairly complex CGI's in Rev, complex in the sense  
that they read templates from disk, replace place holder strings in  
the templates and send the web page back out. It really sparkles...  
while PMwiki, fast relative to other database based wikis, is  
sluggish compared to my Rev CGI's.


FYI: but that is not enough (smile)  we are going to set up a new web  
server in a couple of days, with a dual XEON processor at servePath  
with a 100mbps VPN socket to the switch (where our box is the *only*  
box on the Class C network before the router) and Andre will be  
figuring out how to install Fast_CGI behind Revolution on the new  
box...We can't wait to see how this thing will blaze! We will keep  
you all posted.


I don't know any other language at all but Revolution... so all this  
talk about ajax and stuff is way over my head... maybe that's an  
advantage ifI you already have a Lear Jet, why do you need to know  
how to run a bi-prop?


Hindu Press International is daily generated from the managing  
editor's, work station on, this Rev app builds the daily web pages,  
posts RSS feeds, send out email to the mailing list. I have a remote  
app deployed where voluteers can access the web server, download  
sound files, they do their work, the application uploads transcripts,  
opens the XML file in their browser, sends me and email... I mean  
*why* on earth do you even *want* to use an app inside a browser.  If  
you *need* to access the web, which is not a bad thing.. then just  
send the to the browser to do what browsers do: display HTML: a  
librarian for static resources and leave it there.


We use parsed web page templates (heavy use of SSI's) on all our  
sites and with ! include exec=/cgi-bin/someRev.cgi you can do  
some very interesting things. For example, at  
www.himalayanacademy.com the side bar links for any web pages on in  
any area on the web site are dynamically chosen based on the location  
of the web page. It's very cool and utterly simple, because it means  
that our web editors can take one template, use it for any web page  
in any location and he will get the local area navigation  
automatically installed depending on where the web page is placed.


www.himalayanacademy.com/taka/  see the little archive iFrame, down  
on the right side of the page. This is another very interesting use  
of Rev...where the CGI installs an interactive calendar object (so  
to speak) into the iFrame, dynamically.  it's basically an embedded  
object... and if it were JAVA who know where you could go with it.


my point here is similar to Wally's: I'm not a developer, in any  
given day we have a *lot* of other things happening. Somehow with  
Rev, I can build all this in house and RAD stuff without breaking  
your head on small coding issues for days and days. If my manager  
editor comes to me with a small feature request for the Hindu Press  
International app  I built... With transcript it always seems like  
it's a rare day when you cannot solve a problem or figure out how to  
get something done in less than ten minutes... and then keep moving  
forward. meanwhile, every time I open the PHP config files for the   
web wiki, I start to get a headache right away  (smile)... I mean...  
I *can* figure it out...but, it's just like one has to keep groking  
that code all, while  with transcript, you just think and do it.


If Anyone wants  to see our CGI's I would be happy to put them  
somewhere. Because I am not a developer, they could be  easy for  
newbies to re-use. I see a lot of different places not where this  
kind of offering could be posted and one doesn't know which is best.


And last but not least, to affirm Richard's observations with real  
life testimony (I think I posted some of this once before)


 While only useful in a subset of scenarios, it offers many  
benefits, esp. for intranets where employers are losing billions in  
lost productivity by providing open web access to their employees  
when all they really need is access to specific company- and vendor- 
specific resources.


*confirmed!*: This week we see another case of the trend..Away from  
browsers  We have a xerox Printer copier proofing machine  here and  
Xerox used to deploy a browser based, UI, that users on the LAN would  
open in IE or Firefox (didn't  work in Safari) to *see* the  
printer across the LAN, the printer is using a truncated linux OS on  
the FIERY.. well that thing was so buggy and broken...


Well guess what? Their reps came by this week to tell us. Our  
engineers at Xerox abandoned the web based Java UI and we 

Re: Making the move...

2006-03-23 Thread Marty Knapp

Sivakatirswami wrote:


If Anyone wants  to see our CGI's I would be happy to put them 
somewhere. Because I am not a developer, they could be  easy for 
newbies to re-use. I see a lot of different places not where this kind 
of offering could be posted and one doesn't know which is best.
Thanks for sharing what's happening with you - very inspiring. 
Personally, I would love to take a look at what you've put together. I'm 
just in the middle of Jacque's great cgi tutorial and am eager to learn 
all I can about Rev CGIs. I've recently applied for a couple of web 
developer jobs (one at out local university) but a downfall for me is 
that I don't program in Perl or PHP, and can't seem to get motivated to 
do so. It would be great to see Rev become more well know for this 
dimension of its vast capabilities.


Marty Knapp
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-22 Thread Geoff Canyon
First, this isn't all that long -- 98 lines -- but in any case I'd  
consider:


 -- breaking out routines for local vs. server connection
 -- breaking out a routine for when we're just counting records that  
match vs. returning data
 -- breaking out a routine that, given a itemList describing a set  
of fields, returns the data from those fields


Some of the rest I'm still not clear on, so it's hard to say.

As I said, more art than science, but to me a routine like this is  
more than five times as difficult to understand/debug/manage than the  
five twenty line routines that might replace it.


Not that I haven't written my fair share of these ;-)

regards,

Geoff

On Mar 21, 2006, at 11:59 AM, Rob Cozens wrote:


Hi Geoff ,


Wow -- so what does this do?



From Serendipity Reference:



The findSDBRecord command checks for the existence  locked/ 
unlocked status of a record with the record type and key specified  
in line 1 of sdbBuffer.  It can also be used to unlock a record  
that was previously locked but not changed or to return a count of  
the number of records with certain field contents.


findSDBRecord is undoubtedly the most complex, but also the most  
powerful, SDB command.  It is the only SDB command that will  
retrieve information from multiple records in a single call.  As  
such, it is ideally suited to retrieve specified fields from a  
range of records for reporting or analysis.


exactKey (boolean) defaults to true, in which case findSDBRecord  
returns card id 0 if the exact key is not in the database;  
otherwise findSDBRecord will return the id for the record with the  
closest higher key of the specified record type.


If fieldDelimiter is empty findSDBRecord simply returns the  
Revolution card id of the record in word 4 of the result.  If  
fieldDelimiter is not empty, itemList contains a list of field  
references (one per line) to retrieve.  A field reference can take  
two forms:


* a number that resolves to the field's ordinal position in the  
record (0 = the record key)
* an SDB field reference ([Record Type]:[dataname]), which the  
SDB handlers will resolve to a field ordinal.


These two forms of reference can be used interchangably EXCEPT for  
record types that have no Dictionary definition in the database.


findSDBRecord then puts a delimited list of the contents of the  
fields into lines 2 to -1 of sdbBuffer.


setPosition (boolean)  defaults to true.

unlockRecord (boolean) defaults to false.  If true and the record  
was locked by this user, it will be removed from the locked record  
table.


findSDBRecord can be passed search criteria that must be met before  
a record is retrieved, and instructed to search forward or backward  
from the key if the key's record does not meet the search criteria  
until the first acceptable record is found.


searchForward (boolean) determines search direction; default is  
true (forward).


searchCriteria contains one or more lines in the following format:
-- field reference,test,target,and/or
* field reference is the field's ordinal or Data Dictionary name,  
as defibed above.

* tests: = , ,in, not in, , , =, or =
* target is the result to which the item is to be compared; it must  
be a value, not a reference to another field in the record

* and or or is not needed on last line of search criteria

Example search criteria (assumes the field is defined in Record  
Type, TYPE as dataname department):

TYPE:department,,21,and
TYPE:department,,34
Selects only records where the value of field department is  
between 22 and 33.


If cutoffKey is not empty, findSDBRecord will discontinue the  
search when it encounters a record with a key  cutoffKey if  
searching forward or  cutoffKey if searching backward; otherwise  
the search will end with the first matching record if  
recordDelimiter is empty or the last/first record if it is not.


If recordDelimiter is empty, findSDBRecord returns information for  
the first matching record it encounters.  If recordDelimiter is not  
empty, findSDBRecord puts empty into sdbBuffer and returns the  
number of records matching the search criteria in word four of the  
rersult if the fieldDelimiter is empty; otherwise it returns the  
information for each matching record found between the key passed  
in sdbBuffer and cutoffKey or the last/first record of the  
specified record type.  This information will be found in lines 2  
to -1 of sdbBuffer.  (The recordDelimiter is used to delimit  
individual records.)


Note that findSDBRecord will return a locked record error if the  
record exists but is locked by another user.




Rob Cozens
CCW, Serendipity Software Company

And I, which was two fooles, do so grow three;
Who are a little wise, the best fooles bee.

from The Triple Foole by John Donne (1572-1631)

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, 

Re: Making the move...

2006-03-22 Thread Alex Tweedly

Sarah Reichelt wrote:



OK, I have a better example. Say I have a data set and I need to loop
through it and extract three different pieces of information e.g. a
list of the 4th column in each line, a list of lines that match a
certain set of criteria, and a cumulative total obtained by adding a
certain column in each line.

Each of these could be done in a separate function, but that would
mean looping through the data set three times. With a large data set,
it is significantly faster to loop once, filling all three new
variables in the single loop. If I separate this off into a separate
function, then I need a way of passing multiple results back.

The alternatives that I see are to use script local variables or to
pass an empty parameter by reference and have the function fill it.
Does anyone have any other ideas or recommendations?
 

I'd probably use parameters by reference for each of the result values. 
To me, that's one of the good ways to use pass by ref.


But if you didn't want to do that, and also didn't want to use an array, 
you could perhaps return a list of the result values. If you can find 
one more character that you can be sure won't appear in the results, 
simply use it to concatenate the results.


For example:


function getThreeThings pFrom
   .
 return tOne  numtochar(3) tTwo  numtochar(3)  tThree
end getThreeThings



and when you call it


put getThreeThings(tData) into temp
set the itemDel to numtochar(3)
put item 1 of temp into t1
put item 2 of temp into t2
etc.



btw - when are Rev going to implement the etc. keyword ?


--
Alex Tweedly   http://www.tweedly.net



--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.385 / Virus Database: 268.2.6/286 - Release Date: 20/03/2006

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-22 Thread Rob Cozens


Hi Geoff,


 -- breaking out routines for local vs. server connection


You're ignoring my notes: application requirement: the calling syntax 
must be identical for client, server, and single user.


 -- breaking out a routine for when we're just counting records that 
match vs. returning data


Why? It is not used anywhere else but in this handler.  Like Chipp, if 
I find a need for the logic in another handler, I'll generalize it.


 -- breaking out a routine that, given a itemList describing a set of 
fields, returns the data from those fields




Why? It is not used anywhere else but in this handler.  Like Chipp, if 
I find a need for the logic in another handler, I'll generalize it.  
And actually, theSDRecordMatches function handles most of that logic.


to me a routine like this is more than five times as difficult to 
understand/debug/manage than the five twenty line routines that might 
replace it.




Where's the beef!  Show me the money!  Divide findSDRecord into five 
twenty-line routines and post the result.


I must say, Geoff, you seem to have a penchant for splitting handlers 
when there is no need to do so.


Rob Cozens
CCW, Serendipity Software Company

And I, which was two fooles, do so grow three;
Who are a little wise, the best fooles bee.

from The Triple Foole by John Donne (1572-1631)

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-22 Thread Geoff Canyon


On Mar 22, 2006, at 7:34 AM, Rob Cozens wrote:



Hi Geoff,


 -- breaking out routines for local vs. server connection


You're ignoring my notes: application requirement: the calling  
syntax must be identical for client, server, and single user.


That's fine -- I'm just saying that the routine would look something  
like:


on doSomething pArg
  if tSingleUser then
doSomethingForSingleUser pArg
  else
doSomethingForMultiUser pArg
  end if
end doSomething pArg

This way the user can call the routine without regard to whether it's  
single user or multiuser, but you don't have two big chunks of code  
lumped together in one handler that can easily be separated.




 -- breaking out a routine for when we're just counting records  
that match vs. returning data


Why? It is not used anywhere else but in this handler.  Like Chipp,  
if I find a need for the logic in another handler, I'll generalize it.


Because it gets rid of a bunch of if statements in your repeat loop.  
It costs you a bit in that the repeat structure is duplicated in the  
routine that simply counts, so that's a tradeoff. But your repeat  
ends up being faster because you aren't doing tests each time through.


Further, your code ends up being easier to understand, because one  
routine simply counts, while one returns data -- more clear.




 -- breaking out a routine that, given a itemList describing a set  
of fields, returns the data from those fields




Why? It is not used anywhere else but in this handler.  Like Chipp,  
if I find a need for the logic in another handler, I'll generalize  
it.  And actually, theSDRecordMatches function handles most of that  
logic.


Just because something isn't used anywhere else doesn't mean it  
should be lumped in. If it can be clearly expressed as a single  
action (given an itemList describing a set of fields, return the data  
from those fields) it can be broken out, and both routines will be  
easier to understand as a result.




to me a routine like this is more than five times as difficult to  
understand/debug/manage than the five twenty line routines that  
might replace it.




Where's the beef!  Show me the money!  Divide findSDRecord into  
five twenty-line routines and post the result.


I must say, Geoff, you seem to have a penchant for splitting  
handlers when there is no need to do so.


I obviously don't know SDB well enough to:

 -- know what's right for it by my standards
 -- know what's right for it by your standards
 -- change code (or propose changes) in it without knowing the  
context in which the code operates


I thought a bit before offering comment. Maybe not long enough ;-) If  
I've offended, I apologize. It wasn't my intention to cast stones at  
anyone's house in particular.


If you can indulge me for just a moment longer, though, I'd like to  
throw out an analogy. Look at your comments above. The same thing  
could have been said as:


On Mar 22, 2006, at 7:34 AM, Rob Cozens wrote:
Hi Geoff, You're ignoring my notes: application requirement: the  
calling syntax must be identical for client, server, and single  
user. Why? It is not used anywhere else but in this handler.  Like  
Chipp, if I find a need for the logic in another handler, I'll  
generalize it. Why? It is not used anywhere else but in this  
handler.  Like Chipp, if I find a need for the logic in another  
handler, I'll generalize it.  And actually, theSDRecordMatches  
function handles most of that logic. Where's the beef!  Show me the  
money!  Divide findSDRecord into five twenty-line routines and post  
the result. I must say, Geoff, you seem to have a penchant for  
splitting handlers when there is no need to do so. Rob Cozens CCW,  
Serendipity Software Company And I, which was two fooles, do so  
grow three; Who are a little wise, the best fooles bee. from The  
Triple Foole by John Donne (1572-1631)


Breaking up your comments into paragraphs doesn't change the meaning  
of what you said, but it makes it clearer.


regards,

Geoff


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-22 Thread Rob Cozens

Geoff,


 -- breaking out routines for local vs. server connection



Client selection [server opens all dbs as local connections]:

replace return with numToChar(29) in itemList
replace return with numToChar(29) in searchCriteria
requestSDBService  
sdbBuffer,find,packArguments(9,exactKey,fieldDelimiter,itemList,setPos 
ition,searchForward,searchCriteria,cutoffKey,recordDelimiter,unlockRecor 
d)

get the result
if not word 1 of it and setPosition then put word 4 of it into  
sdbPosition

put it into sdbParameters
return it

Every db access call has similar logic, but the second and third  
arguments are unique.  To generalize:


replace return with numToChar(29) in itemList
replace return with numToChar(29) in searchCriteria
put  
packArguments(9,exactKey,fieldDelimiter,itemList,setPosition,searchForwa 
rd,searchCriteria,cutoffKey,recordDelimiter,unlockRecord) into  
packedArguments

doGeoffsHandler sdBuffer,find,packedArguments
return the result

on doGeoffsHandler @sdBuffer,serviceType,packedArguments
requestSDBService sdbBuffer,serviceType,packedArguments
get the result
if not word 1 of it and setPosition then put word 4 of it into  
sdbPosition

put it into sdbParameters
return it
end doGeoffsHandler

I've saved two lines in the original handler...for what--the need to  
look up another handler to see the full picture?


Rob Cozens
CCW, Serendipity Software Company

And I, which was two fooles, do so grow three;
Who are a little wise, the best fooles bee.

from The Triple Foole by John Donne (1572-1631)

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-22 Thread Rob Cozens

Geeze Geoff ,


 If I've offended, I apologize.


I thought you knew me better than that.  :{`)

If I've come off pedantic or emotionally upset, then I'm sorry.

There is no right or wrong answer, it's a matter of preference...and my 
preferences are closer to Chipp's than yours in this matter.


Your friend, Cousin Rob

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-22 Thread Rob Cozens

 Geoff:


on doSomething pArg
  if tSingleUser then
doSomethingForSingleUser pArg
  else
doSomethingForMultiUser pArg
  end if
end doSomething pArg





doSomethingForMultiUser pArg


is the seven lines I used as an example in my last post, the remaining 
90 lines comprise doSomethingForSingleUser pArg


Rob

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-22 Thread Rob Cozens


Geoff,

Because it gets rid of a bunch of if statements in your repeat loop. 
It costs you a bit in that the repeat structure is duplicated in the 
routine that simply counts, so that's a tradeoff. But your repeat ends 
up being faster because you aren't doing tests each time through.


Further, your code ends up being easier to understand, because one 
routine simply counts, while one returns data -- more clear.




The function here is to count, and optionally select data from, records 
that match search criteria.  To count and select in separate logic 
means parsing all records twice.


I did find this logic:

repeat for each line itemNumber in itemList
  put sdbFieldNumber(itemNumber) into itemNumber

that should be evaluated once all error checks are passed:

put empty into rawItemNumbers
repeat for each line itemNumber in itemList
  put sdbFieldNumber(itemNumber)return after rawItemNumers
end repeat
put rawItemNumers into itemList

and removed from the repeat loop...thanks.

Other than that, I don't see much efficiency to be gained here.

Also, if you look closely at if countOnly statements, you will find 
that they are in repeat exit logic, and never get executed more than 
once.


Rob Cozens
CCW, Serendipity Software Company

And I, which was two fooles, do so grow three;
Who are a little wise, the best fooles bee.

from The Triple Foole by John Donne (1572-1631)

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-22 Thread Rob Cozens


Sarah, Mark, et al:


arrays are things that don't come
naturally to me, so I probably ignore them when they would be useful.



Arrays, in the traditional sense (ie: element(1)...element(n)), were 
part and parcel of my programming instruction in BASIC and my first 
professional programming in FORTRAN; but I rarely use them today.


But Transcript keyed arrays make wonderful run-time tables.

SDB Client/Server uses:

local clientDbList -- array by clientId:dbId1, dbId2, etc
local dbClientList -- array by dbId:client id,writeAccessType,current 
position

local indexList -- array by dbId:cardIndex
local lockedRecordList -- array by dbId: record id, client id
local sdbDbPathList -- array by dbId: db stack path, autoLockOn, 
readLocksEnforced

local sdbFieldDelimiter -- array by record type
local sdbFieldEdits -- array by record type
local sdbFieldList -- array by recordType: field name list
local sdbTranslationList -- array by clientId: 1=ASCIIANSI, 0=None, or 
-1=ANSIASCII + tab  ipcProtocol [tp,ae,pc,dc,sf]


so...

clientDbList[sdbClientId] gives me a list of the ids of all dbs the 
client has open
dbClientList[sdbDbId] gives me a list of all clients using the db, 
including access type  current record position

indexList[sdbDbId] gives me the index to the db
lockedRecordList[sdbDbId] gives me a list of the ids of all locked 
records along with the id of the user with the lock


etc.

I find this very powerful and easier to implement than alternative 
syntax.


Rob Cozens
CCW, Serendipity Software Company

And I, which was two fooles, do so grow three;
Who are a little wise, the best fooles bee.

from The Triple Foole by John Donne (1572-1631)

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-21 Thread Geoff Canyon


On Mar 20, 2006, at 6:20 PM, Sarah Reichelt wrote:


I haven't ever really tested it and I have an instinctive feeling that
functions should be self-sufficient and shouldn't change anything
outside them. Maybe it will suit me better in some circumstances.


This is true, but passing by reference doesn't violate this,  
depending on how it's used. If you have a clear-cut function that  
operates on a value passed by reference because of its size, that's  
not a bad thing I don't think.


gc
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-21 Thread Geoff Canyon

Wow -- so what does this do?

On Mar 20, 2006, at 9:28 AM, Rob Cozens wrote:


Hi Geoff,


Out of curiosity, do you have an example handy of a long handler  
that you think makes more sense to keep together than to break up?  
Or one that you think can't be broken up without significant  
effort to do it?




on findSDBRecord  
@sdbBuffer,exactKey,fieldDelimiter,itemList,setPosition,searchForward, 
searchCriteria,cutoffKey,recordDelimiter,unlockRecord

  -- 28 Feb 04:RCC
  if ipcMode is not dc then -- dc = single user direct connection
replace return with numToChar(29) in itemList
replace return with numToChar(29) in searchCriteria
requestSDBService sdbBuffer,find,packArguments 
(9,exactKey,fieldDelimiter,itemList,setPosition,searchForward,searchCr 
iteria,cutoffKey,recordDelimiter,unlockRecord)

get the result
if not word 1 of it and setPosition then put word 4 of it into  
sdbPosition

put it into sdbParameters
return it
  else
if invalidSDBClient() then return truereturnsdbMessage 
(sdbInvalidClientError,true)
if offset(returnsdbDbIdreturn,return(the keys of indexList) 
return) = 0 then return truereturnsdbMessage(sdbDbIdError,true)

if exactKey is empty then put true into exactKey
put (fieldDelimiter is not empty) into retrieveData
if recordDelimiter is not empty then
  put true into multipleRecords
  put false into unlockRecords
  put false into setPosition
else put false into multipleRecords
put (multipleRecords and not retrieveData) into countOnly
if setPosition is empty or retrieveData then put true into  
setPosition

if searchForward is empty then put true into searchForward
put ((sdbWriteAccess is Shared) and (unlockRecord is true))  
into unlockRecord

put word 2 to 4 of sdbParameters into savedPosition
put justifyString(word 1 of sdbBuffer,4) into theRecordType
getSDBRecord sdbBuffer,exactKey,,,setPosition,retrieveData
get the result
put word 2 to -1 of line 1 of sdbBuffer into recordKey
if word 1 of it or (((recordKey  cutoffKey and searchForward)  
or (recordKey  cutoffKey and not searchForward)) and cutoffKey is  
not empty) then

  put falsesavedPosition into sdbParameters
  put false0 0 0 into line 1 of it
  return it
else
  if unlockRecord and sdbWriteAccess is Shared then  
deleteDbLock(word 4 of sdbParameters)

  if not retrieveData and not multipleRecords then
put it into sdbParameters
return it
  end if
end if
put word 4 of sdbParameters into oldPosition
put empty into returnRecord
put 0 into recordCount
repeat
  put word 2 to -1 of line 1 of sdbBuffer into recordKey
  if (recordKey  cutoffKey and searchForward) or (recordKey   
cutoffKey and not searchForward) then

put false into word 1 of sdbParameters
if countOnly then
  put empty into sdbBuffer
  return (word 1 to 3 of sdbParameters)recordCount
else
  put theRecordTyperecordCountreturnreturnRecord into  
sdbBuffer

  return (word 1 to 3 of sdbParameters)0
end if
  end if
  delete line 1 of sdbBuffer
  if theSDBRecordMatches 
(sdbBuffer,fieldDelimiter,searchCriteria) then

add 1 to recordCount
repeat for each line itemNumber in itemList
  put sdbFieldNumber(itemNumber) into itemNumber
  if itemNumber = 0 then put recordKeyfieldBelimiter after  
returnRecord
  else put getItem(itemNumber,fieldDelimiter,sdbBuffer) 
fieldDelimiter after returnRecord

end repeat
if multipleRecords then put recordDelimiter after returnRecord
else
  put theRecordTyperecordKeyreturnreturnRecord into  
sdbBuffer

  return (word 1 to 3 of sdbParameters)
end if
  end if
  set cursor to busy
  if searchForward then
if word 2 of sdbParameters  word 3 of sdbParameters then
  put + into sdbBuffer
  getSDBRecord sdbBuffer,exactKey,,,true,retrieveData
  put the result into sdbParameters
else put true into sdbParameters
  else
if word 2 of sdbParameters  1 then
  put - into sdbBuffer
  getSDBRecord sdbBuffer,exactKey,,,true,retrieveData
  put the result into sdbParameters
else put true into sdbParameters
  end if
  if word 1 of sdbParameters then
put false into word 1 of sdbParameters
put oldPosition into word 4 of sdbParameters
if countOnly then
  put empty into sdbBuffer
  return (word 1 to 3 of sdbParameters)recordCount
else
  put theRecordTyperecordCountreturnreturnRecord into  
sdbBuffer

  return (word 1 to 3 of sdbParameters)0
end if
  else if not setPosition then put oldPosition into word 4 of  
sdbParameters

end repeat
  end if
end findSDBRecord

Note:
stack local variables and constant declarations excluded.
	application 

Re: Making the move...

2006-03-21 Thread Rob Cozens

Hi Geoff ,


Wow -- so what does this do?



From Serendipity Reference:



The findSDBRecord command checks for the existence  locked/unlocked 
status of a record with the record type and key specified in line 1 of 
sdbBuffer.  It can also be used to unlock a record that was previously 
locked but not changed or to return a count of the number of records 
with certain field contents.


findSDBRecord is undoubtedly the most complex, but also the most 
powerful, SDB command.  It is the only SDB command that will retrieve 
information from multiple records in a single call.  As such, it is 
ideally suited to retrieve specified fields from a range of records for 
reporting or analysis.


exactKey (boolean) defaults to true, in which case findSDBRecord 
returns card id 0 if the exact key is not in the database; otherwise 
findSDBRecord will return the id for the record with the closest higher 
key of the specified record type.


If fieldDelimiter is empty findSDBRecord simply returns the Revolution 
card id of the record in word 4 of the result.  If fieldDelimiter is 
not empty, itemList contains a list of field references (one per line) 
to retrieve.  A field reference can take two forms:


* a number that resolves to the field's ordinal position in the record 
(0 = the record key)
* an SDB field reference ([Record Type]:[dataname]), which the SDB 
handlers will resolve to a field ordinal.


These two forms of reference can be used interchangably EXCEPT for 
record types that have no Dictionary definition in the database.


findSDBRecord then puts a delimited list of the contents of the fields 
into lines 2 to -1 of sdbBuffer.


setPosition (boolean)  defaults to true.

unlockRecord (boolean) defaults to false.  If true and the record was 
locked by this user, it will be removed from the locked record table.


findSDBRecord can be passed search criteria that must be met before a 
record is retrieved, and instructed to search forward or backward from 
the key if the key's record does not meet the search criteria until the 
first acceptable record is found.


searchForward (boolean) determines search direction; default is true 
(forward).


searchCriteria contains one or more lines in the following format:
-- field reference,test,target,and/or
* field reference is the field's ordinal or Data Dictionary name, as 
defibed above.

* tests: = , ,in, not in, , , =, or =
* target is the result to which the item is to be compared; it must be 
a value, not a reference to another field in the record

* and or or is not needed on last line of search criteria

Example search criteria (assumes the field is defined in Record Type, 
TYPE as dataname department):

TYPE:department,,21,and
TYPE:department,,34
Selects only records where the value of field department is between 
22 and 33.


If cutoffKey is not empty, findSDBRecord will discontinue the search 
when it encounters a record with a key  cutoffKey if searching forward 
or  cutoffKey if searching backward; otherwise the search will end 
with the first matching record if recordDelimiter is empty or the 
last/first record if it is not.


If recordDelimiter is empty, findSDBRecord returns information for the 
first matching record it encounters.  If recordDelimiter is not empty, 
findSDBRecord puts empty into sdbBuffer and returns the number of 
records matching the search criteria in word four of the rersult if the 
fieldDelimiter is empty; otherwise it returns the information for each 
matching record found between the key passed in sdbBuffer and cutoffKey 
or the last/first record of the specified record type.  This 
information will be found in lines 2 to -1 of sdbBuffer.  (The 
recordDelimiter is used to delimit individual records.)


Note that findSDBRecord will return a locked record error if the record 
exists but is locked by another user.




Rob Cozens
CCW, Serendipity Software Company

And I, which was two fooles, do so grow three;
Who are a little wise, the best fooles bee.

from The Triple Foole by John Donne (1572-1631)

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-21 Thread Sarah Reichelt
On 3/21/06, Geoff Canyon [EMAIL PROTECTED] wrote:
 Do you have an example? I agree that if you end up passing in a
 handful of arguments by reference, you haven't accomplished much by
 breaking out the routine. The question is if there isn't a better way
 to slice the routine, where that wouldn't be necessary.


OK, I have a better example. Say I have a data set and I need to loop
through it and extract three different pieces of information e.g. a
list of the 4th column in each line, a list of lines that match a
certain set of criteria, and a cumulative total obtained by adding a
certain column in each line.

Each of these could be done in a separate function, but that would
mean looping through the data set three times. With a large data set,
it is significantly faster to loop once, filling all three new
variables in the single loop. If I separate this off into a separate
function, then I need a way of passing multiple results back.

The alternatives that I see are to use script local variables or to
pass an empty parameter by reference and have the function fill it.
Does anyone have any other ideas or recommendations?

Sarah
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-21 Thread Mark Smith
You might put the multiple results into the elements of an array, and  
return the array.


Mark

On 22 Mar 2006, at 00:55, Sarah Reichelt wrote:


On 3/21/06, Geoff Canyon [EMAIL PROTECTED] wrote:

Do you have an example? I agree that if you end up passing in a
handful of arguments by reference, you haven't accomplished much by
breaking out the routine. The question is if there isn't a better way
to slice the routine, where that wouldn't be necessary.



OK, I have a better example. Say I have a data set and I need to loop
through it and extract three different pieces of information e.g. a
list of the 4th column in each line, a list of lines that match a
certain set of criteria, and a cumulative total obtained by adding a
certain column in each line.

Each of these could be done in a separate function, but that would
mean looping through the data set three times. With a large data set,
it is significantly faster to loop once, filling all three new
variables in the single loop. If I separate this off into a separate
function, then I need a way of passing multiple results back.

The alternatives that I see are to use script local variables or to
pass an empty parameter by reference and have the function fill it.
Does anyone have any other ideas or recommendations?

Sarah
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your  
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-21 Thread Sarah Reichelt
I didn't think of that Mark. Again, arrays are things that don't come
naturally to me, so I probably ignore them when they would be useful.
In this case, it sounds like a really good solution.

Thanks,
Sarah


On 3/22/06, Mark Smith [EMAIL PROTECTED] wrote:
 You might put the multiple results into the elements of an array, and
 return the array.

 Mark

 On 22 Mar 2006, at 00:55, Sarah Reichelt wrote:

  On 3/21/06, Geoff Canyon [EMAIL PROTECTED] wrote:
  Do you have an example? I agree that if you end up passing in a
  handful of arguments by reference, you haven't accomplished much by
  breaking out the routine. The question is if there isn't a better way
  to slice the routine, where that wouldn't be necessary.
 
 
  OK, I have a better example. Say I have a data set and I need to loop
  through it and extract three different pieces of information e.g. a
  list of the 4th column in each line, a list of lines that match a
  certain set of criteria, and a cumulative total obtained by adding a
  certain column in each line.
 
  Each of these could be done in a separate function, but that would
  mean looping through the data set three times. With a large data set,
  it is significantly faster to loop once, filling all three new
  variables in the single loop. If I separate this off into a separate
  function, then I need a way of passing multiple results back.
 
  The alternatives that I see are to use script local variables or to
  pass an empty parameter by reference and have the function fill it.
  Does anyone have any other ideas or recommendations?
 
  Sarah
  ___
  use-revolution mailing list
  use-revolution@lists.runrev.com
  Please visit this url to subscribe, unsubscribe and manage your
  subscription preferences:
  http://lists.runrev.com/mailman/listinfo/use-revolution

 ___
 use-revolution mailing list
 use-revolution@lists.runrev.com
 Please visit this url to subscribe, unsubscribe and manage your subscription 
 preferences:
 http://lists.runrev.com/mailman/listinfo/use-revolution

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-21 Thread Chipp Walters
I'm just a simple Caveman programmer. Your advanced technology and talk 
of arrays and multiple functions frighten me. In this case, I'd just as 
soon keep thinkgs in a single handler which cavemen like me can read and 
debug easily.


:-)

-Chipp

Sarah Reichelt wrote:

I didn't think of that Mark. Again, arrays are things that don't come
naturally to me, so I probably ignore them when they would be useful.
In this case, it sounds like a really good solution.

Thanks,
Sarah


On 3/22/06, Mark Smith [EMAIL PROTECTED] wrote:


You might put the multiple results into the elements of an array, and
return the array.

Mark

On 22 Mar 2006, at 00:55, Sarah Reichelt wrote:



On 3/21/06, Geoff Canyon [EMAIL PROTECTED] wrote:


Do you have an example? I agree that if you end up passing in a
handful of arguments by reference, you haven't accomplished much by
breaking out the routine. The question is if there isn't a better way
to slice the routine, where that wouldn't be necessary.



OK, I have a better example. Say I have a data set and I need to loop
through it and extract three different pieces of information e.g. a
list of the 4th column in each line, a list of lines that match a
certain set of criteria, and a cumulative total obtained by adding a
certain column in each line.

Each of these could be done in a separate function, but that would
mean looping through the data set three times. With a large data set,
it is significantly faster to loop once, filling all three new
variables in the single loop. If I separate this off into a separate
function, then I need a way of passing multiple results back.

The alternatives that I see are to use script local variables or to
pass an empty parameter by reference and have the function fill it.
Does anyone have any other ideas or recommendations?

Sarah


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Geoff Canyon
Out of curiosity, do you have an example handy of a long handler that  
you think makes more sense to keep together than to break up? Or one  
that you think can't be broken up without significant effort to do it?


When you think of a long handler, do you generally think of it as  
having a single identifiable task, or do you think of it as being  
several tasks performed in sequence in one handler?


Obviously it's possible that you simply think in bigger chunks ;-)

On Mar 19, 2006, at 3:57 PM, Chipp Walters wrote:

Yep, I've heard that before, but frankly, for me, I'd rather keep  
it all in one, unless there's a really good reason to separate into  
multiple handlers (as in creating more reusability). I find it much  
easier to debug code I've written this way than hunting through the  
message path for the 15 or so functions/handlers I've written  
trying to make things 'more simple.' Just a difference in coding  
style.


In fact, typically I'll write code procedurally in a longer  
handler, then only break it up if/when I know I need to do part of  
the same thing again. Like most of us, I'd rather not code twice.


Even though, I've got libraries with over 50 handlers/functions.

-Chipp

Mark Wieder wrote:

Geoff-
Saturday, March 18, 2006, 1:24:50 PM, you wrote:

I've never seen a hundred-line routine that wouldn't be better as
five twenty-line routines, each of which could be documented with a
line of code. Perhaps even ten ten-line routines.


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


RE: Making the move...

2006-03-20 Thread Stephen Barncard

Are you the new listmom?

sqb


Hey gang,

Im not naming names but Im feeling some heat when it's about time I enjoy a
nice Sunday evening with my family - lets leave the past in the past and
kill this thread. If you want to continue on an individual basis on this
topic, then please email each other offlist.

Best regards,

Lynn Fredricks
Worldwide Business Operations
Runtime Revolution, Ltd


--
stephen barncard
s a n  f r a n c i s c o
- - -  - - - - - - - - -
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Chipp Walters

Hi Geoff,

One does come to mind, it's the startup handler(s) of my splash stack, 
and they are broken down serially into 7 or 8 different handlers, each 
numbered sequentially with a handler name.


And because I want to be able to read them one after the other, I ended 
up programming them serially. Some were as long as 50-60 lines, others 
shorter. Because they form the code of virtually all of my applications, 
I wanted them to be very easily read, and updated.


This worked for me. May not have for you, I don't know. I doubt my brain 
can grasp thinking in bigger chunks..it's working overtime as it is!


-Chipp

Geoff Canyon wrote:
Out of curiosity, do you have an example handy of a long handler that  
you think makes more sense to keep together than to break up? Or one  
that you think can't be broken up without significant effort to do it?


When you think of a long handler, do you generally think of it as  
having a single identifiable task, or do you think of it as being  
several tasks performed in sequence in one handler?


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Sarah Reichelt
On 3/20/06, Geoff Canyon [EMAIL PROTECTED] wrote:
 Out of curiosity, do you have an example handy of a long handler that
 you think makes more sense to keep together than to break up? Or one
 that you think can't be broken up without significant effort to do it?

 When you think of a long handler, do you generally think of it as
 having a single identifiable task, or do you think of it as being
 several tasks performed in sequence in one handler?

 Obviously it's possible that you simply think in bigger chunks ;-)

In my experience, it's probably due to never passing values by
reference. If I am working on a routine that generates multiple
variables, then acts on them, it is easier to keep it all together
than to try and transfer more than one variable back  forth between
handlers  functions.

A separate function is great if it only has to return one variable,
but as soon as it acts on more than one, I find it easier to leave
that code as part of the main handler.

Of course, if a segment of code is used by more than one handler, it's
worth the effort to split it out, but otherwise, I'm not too fussed
about keeping handlers small. Good commenting can overcome any
problems interpreting it later :-)

Sarah
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Geoff Canyon
This sounds like a bunch of small handlers masquerading as a large  
handler ;-)


Nothing wrong with that, I just think it means that you're really on  
my side of the big/small question, except that you don't like the  
surplus of handler names it leads to. I can certainly agree with  
that. Every time I've ever advocated small routines, I've mentioned  
as one of the caveats that you end up with that many more handlers to  
keep track of. As you say, if the task is never called separately,  
and you break it out within the larger handler, and you document it,  
it's not that big a deal. I'd argue that if you've done all that you  
might as well break it out as a separate routine, but I think we've  
reached the pot-ay-tos, pot-ah-tos stage of the discussion.


gc

On Mar 20, 2006, at 1:38 AM, Chipp Walters wrote:


Hi Geoff,

One does come to mind, it's the startup handler(s) of my splash  
stack, and they are broken down serially into 7 or 8 different  
handlers, each numbered sequentially with a handler name.


And because I want to be able to read them one after the other, I  
ended up programming them serially. Some were as long as 50-60  
lines, others shorter. Because they form the code of virtually all  
of my applications, I wanted them to be very easily read, and updated.


This worked for me. May not have for you, I don't know. I doubt my  
brain can grasp thinking in bigger chunks..it's working overtime as  
it is!


-Chipp

Geoff Canyon wrote:
Out of curiosity, do you have an example handy of a long handler  
that  you think makes more sense to keep together than to break  
up? Or one  that you think can't be broken up without significant  
effort to do it?
When you think of a long handler, do you generally think of it as   
having a single identifiable task, or do you think of it as being   
several tasks performed in sequence in one handler?

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Geoff Canyon
Do you have an example? I agree that if you end up passing in a  
handful of arguments by reference, you haven't accomplished much by  
breaking out the routine. The question is if there isn't a better way  
to slice the routine, where that wouldn't be necessary.


On Mar 20, 2006, at 4:29 AM, Sarah Reichelt wrote:


In my experience, it's probably due to never passing values by
reference. If I am working on a routine that generates multiple
variables, then acts on them, it is easier to keep it all together
than to try and transfer more than one variable back  forth between
handlers  functions.

A separate function is great if it only has to return one variable,
but as soon as it acts on more than one, I find it easier to leave
that code as part of the main handler.

Of course, if a segment of code is used by more than one handler, it's
worth the effort to split it out, but otherwise, I'm not too fussed
about keeping handlers small. Good commenting can overcome any
problems interpreting it later :-)


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Rob Cozens


G'day Sarah,


In my experience, it's probably due to never passing values by
reference.


I'm curious as to why you eschew passing by reference.

If one needs to pass large variables, why incur the overhead of 
duplicating the value of the variable before passing it?  And if a 
variable value needed at one level is derived from a routine nested 
several calls deep, simply passing the variable by reference through 
the nested calls is the simplest way to get the value back to the 
original caller.


Case in point:

An SDB record can be as large as the maximum amount of text one field 
can contain.  If the syntax of the record retrieval command were 
getSDBRecord sdbBuffer,... instead of getSDBRecord @sdbBuffer,..., 
the command would have to create its own record buffer variable and 
then return a result which is copied into some other variable.  By 
passing by reference, the two handlers (or as many handlers as needed) 
can work on a single copy of the data.


Rob Cozens
CCW, Serendipity Software Company

And I, which was two fooles, do so grow three;
Who are a little wise, the best fooles bee.

from The Triple Foole by John Donne (1572-1631)

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Rob Cozens

Hi Geoff,


Out of curiosity, do you have an example handy of a long handler that  
you think makes more sense to keep together than to break up? Or one  
that you think can't be broken up without significant effort to do it?




on findSDBRecord  
@sdbBuffer,exactKey,fieldDelimiter,itemList,setPosition,searchForward,se 
archCriteria,cutoffKey,recordDelimiter,unlockRecord

  -- 28 Feb 04:RCC
  if ipcMode is not dc then -- dc = single user direct connection
replace return with numToChar(29) in itemList
replace return with numToChar(29) in searchCriteria
requestSDBService  
sdbBuffer,find,packArguments(9,exactKey,fieldDelimiter,itemList,setPos 
ition,searchForward,searchCriteria,cutoffKey,recordDelimiter,unlockRecor 
d)

get the result
if not word 1 of it and setPosition then put word 4 of it into  
sdbPosition

put it into sdbParameters
return it
  else
if invalidSDBClient() then return  
truereturnsdbMessage(sdbInvalidClientError,true)
if offset(returnsdbDbIdreturn,return(the keys of  
indexList)return) = 0 then return  
truereturnsdbMessage(sdbDbIdError,true)

if exactKey is empty then put true into exactKey
put (fieldDelimiter is not empty) into retrieveData
if recordDelimiter is not empty then
  put true into multipleRecords
  put false into unlockRecords
  put false into setPosition
else put false into multipleRecords
put (multipleRecords and not retrieveData) into countOnly
if setPosition is empty or retrieveData then put true into  
setPosition

if searchForward is empty then put true into searchForward
put ((sdbWriteAccess is Shared) and (unlockRecord is true)) into  
unlockRecord

put word 2 to 4 of sdbParameters into savedPosition
put justifyString(word 1 of sdbBuffer,4) into theRecordType
getSDBRecord sdbBuffer,exactKey,,,setPosition,retrieveData
get the result
put word 2 to -1 of line 1 of sdbBuffer into recordKey
if word 1 of it or (((recordKey  cutoffKey and searchForward) or  
(recordKey  cutoffKey and not searchForward)) and cutoffKey is not  
empty) then

  put falsesavedPosition into sdbParameters
  put false0 0 0 into line 1 of it
  return it
else
  if unlockRecord and sdbWriteAccess is Shared then  
deleteDbLock(word 4 of sdbParameters)

  if not retrieveData and not multipleRecords then
put it into sdbParameters
return it
  end if
end if
put word 4 of sdbParameters into oldPosition
put empty into returnRecord
put 0 into recordCount
repeat
  put word 2 to -1 of line 1 of sdbBuffer into recordKey
  if (recordKey  cutoffKey and searchForward) or (recordKey   
cutoffKey and not searchForward) then

put false into word 1 of sdbParameters
if countOnly then
  put empty into sdbBuffer
  return (word 1 to 3 of sdbParameters)recordCount
else
  put theRecordTyperecordCountreturnreturnRecord into  
sdbBuffer

  return (word 1 to 3 of sdbParameters)0
end if
  end if
  delete line 1 of sdbBuffer
  if theSDBRecordMatches(sdbBuffer,fieldDelimiter,searchCriteria)  
then

add 1 to recordCount
repeat for each line itemNumber in itemList
  put sdbFieldNumber(itemNumber) into itemNumber
  if itemNumber = 0 then put recordKeyfieldBelimiter after  
returnRecord
  else put  
getItem(itemNumber,fieldDelimiter,sdbBuffer)fieldDelimiter after  
returnRecord

end repeat
if multipleRecords then put recordDelimiter after returnRecord
else
  put theRecordTyperecordKeyreturnreturnRecord into  
sdbBuffer

  return (word 1 to 3 of sdbParameters)
end if
  end if
  set cursor to busy
  if searchForward then
if word 2 of sdbParameters  word 3 of sdbParameters then
  put + into sdbBuffer
  getSDBRecord sdbBuffer,exactKey,,,true,retrieveData
  put the result into sdbParameters
else put true into sdbParameters
  else
if word 2 of sdbParameters  1 then
  put - into sdbBuffer
  getSDBRecord sdbBuffer,exactKey,,,true,retrieveData
  put the result into sdbParameters
else put true into sdbParameters
  end if
  if word 1 of sdbParameters then
put false into word 1 of sdbParameters
put oldPosition into word 4 of sdbParameters
if countOnly then
  put empty into sdbBuffer
  return (word 1 to 3 of sdbParameters)recordCount
else
  put theRecordTyperecordCountreturnreturnRecord into  
sdbBuffer

  return (word 1 to 3 of sdbParameters)0
end if
  else if not setPosition then put oldPosition into word 4 of  
sdbParameters

end repeat
  end if
end findSDBRecord

Note:
stack local variables and constant declarations excluded.
	application requirement: calling syntax at server and client apps must  
be identical...

 

Re: Making the move...

2006-03-20 Thread Jim Ault
On 3/20/06 9:28 AM, Rob Cozens [EMAIL PROTECTED] wrote:

 on mouseTrapOn -- 3 Mar 04:RCC
insert the script of field Mouse Trap of card 1 of stack
 Serendipity_Library.rev into front
 end mouseTrapOn

I suppose you also have a
SerendipityDo_Library.rev

for those calls that need extra hold, eh?

Jim Ault
Las Vegas


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Rob Cozens

Moi:

  if itemNumber = 0 then put recordKeyfieldBelimiter after 
returnRecord




Thanks for getting me to revisit the handler, Geoff: fieldBelimiter 
was a bug waiting to bite me.


Rob Cozens
CCW, Serendipity Software Company

And I, which was two fooles, do so grow three;
Who are a little wise, the best fooles bee.

from The Triple Foole by John Donne (1572-1631)

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Rob Cozens


Hi Jim,


I suppose you also have a
SerendipityDo_Library.rev



It's still a work in process; but will be released as 
SerendipityDoDa_Library.rev so folks won't think it's 
SerendipityDoDo. :{`)


Rob Cozens
CCW, Serendipity Software Company

And I, which was two fooles, do so grow three;
Who are a little wise, the best fooles bee.

from The Triple Foole by John Donne (1572-1631)

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Mark Wieder
Rob-

Monday, March 20, 2006, 10:04:01 AM, you wrote:

 Thanks for getting me to revisit the handler, Geoff: fieldBelimiter
 was a bug waiting to bite me.

...and that's why I'm such a stickler for declaring variables. If the
compiler can find your bugs for you, why not let it do the work?

-- 
-Mark Wieder
 [EMAIL PROTECTED]

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Josh Mellicker


On Mar 14, 2006, at 6:40 AM, [EMAIL PROTECTED] wrote:


Josh,

Very strong statements. Wow!  If I may ask for further  
clarification... I have two questions I'd love you expound upon.


1)  RealBasic -- that's the main rival, as I see it.  I haven't  
written big enough apps to test, but it seem that the compiler is  
pretty fast. I wonder how they compare in development and upkeep of  
for database projects.  What are your thoughts about the 2  
development environments?


We developed a product in RealBasic a few years ago and never  
released it- (Director was not OS X compatible yet and so not an  
option). At that time (several years ago) we found the compiler slow  
and the general performance atrocious (rollover graphics working  
intermittently, slowly, sticking on over or down states, QT movies  
stuttering.


Of course a lot may have changed since then...




2) Revolution vs Ruby on Rails?  You mean to say you use Revolution  
to write browser enabled web-apps? Something I could access with  
Firefox?  If so, I'd love to hear more.



Read Richard Gaskin's article about Beyond the Browser. http:// 
www.fourthworld.com/embassy/articles/netapps.html Everyone is going  
nuts over Web 2.0, AJAX, Ruby on Rails... sure, for many applications  
(like, a website for example!) running something in a browser makes  
sense.


For any serious business or media application, all the days of trying  
to make Javascript work across browsers, degrade gracefully, etc. can  
be better spent making the app better!


Just like you have to download iTunes, RealPlayer, Google Earth,  
etc., an independent executable that communicates with a remote  
shared database makes way more sense to me than trying to force a  
browser to do more than pictures and text.


The exception is Flash, an amazing technology that runs in a browser,  
but sadly, the dev environment seems more suited for masochists than  
people who just want the job done... before lunch.



Just my .03 (inflation)



Thanks again for you very insightful comments.  I really appreciate  
them.


Michael

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your  
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution




___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Judy Perry
Marielle,

I believe this response to Chipp is a unfair.

The post you cite regarding Jerry was apologized for almost immediately
after he realized that he sent it to the list and not to Jerry personally.
And I seem to recall Jerry being nearly abusive in the posts sent around
that time.  I don't have the time at present to go google pipermail to
cite each and every post, but you might wish to do so to revisit the issue
in its larger context.

As for Richmond, my impression (for what very little it is possibly worth)
is that, while he is perhaps an individual of passion and industriousness,
he can also be a tad on the nasty side (private and public mails) and
drove me nearly stark raving batty with his continued whining about why he
couldn't have Rev for free while the rest of us were paying as well as we
could to update our licenses and do our part to help the company maintain
revenue needed to fix whatever it was that any of us might have been
bitching about to get fixed.  Teachers get paid for their teaching
assignments (not alot, I'll concede).  Mightn't all students all similarly
insist that 'information wants to be free' and that teachers should just
give their time away and beg on the streets for daily bread?  Outside of
Socrates (whose wife was continually begging him to go build walls and the
like), I suspect that there are remarkably few educators who would apply
to themselves the sentiment that they seem to demand of software
developers.

Judy

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Josh Mellicker


On Mar 14, 2006, at 3:17 PM, [EMAIL PROTECTED] wrote:

So I anticipate that the web apps would be VERY simple, and it  
might even be possible to push the date into something like PHP- 
Fusion or Joomla!


Joomla = NO

WordPress = YES

e107 = YES

: )

from one who has done way too much experimentation with open source  
CMS apps!

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Josh Mellicker


On Mar 19, 2006, at 12:55 PM, Mark Wieder wrote:


It's probably my forth background, but I'm mildly allergic to routines
that don't fit in their entirety onto my screen.

--  
-Mark Wieder

 [EMAIL PROTECTED]



Ah, I just realized why I'm writing overly complex handlers and not  
using functions... a 30 Cinema Display :-(


Kachoo!
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Dan Shafer
OMG, Judy, two things we can agree on in, what?, less than a month? Perhaps
the end of the cycle is imminent!

:-)

I spent two years once trying to sell a product into the education market.
(I use quotation marks because in my experience -- which may well have been
unique for all I know -- there is no such thing as a market called
education.) Here's what I ran into (enough years ago that some of it may
no longer be valid and it specifically applies to K-12, not secondary):

1.  The decision-maker is often hard to find. This was a real deal-blocker
for us. I'm not kidding. In one case, we found out that the key decision
maker in determing what software a school district (a large one, at that)
would buy was the nephew of the superintendent who worked as an outside
consultant. He wasn't on an org chart and we could not make a direct
presentation to him. That was the extreme but it was only a matter of
degree.

2.  Educators often cried poor-mouth, seeking deep, deep discounts that
would have resulted in our inability to stay in business but then they also
wanted reliable tech support (including pre-sale) and training.

3.  Too often, educators felt justified taking our proprietary software and
duplicating it for their fellow educators, on the same basis as #2, i.e.,
they were under-funded and under-paid.

Now I'm not going to argue that educators are adequately compensated let
alone overpaid. And I know that in the U.S. at least the priority we place
on education in our budgets is horrific in contrast to the lip service we
pay to the importance of education in our society. But even programmers have
to eat (though they seem able to subsist of Jolt and Twinkies for extended
periods of time, with the odd pizza tossed in for good measure.) But what
does seem to me to be the case is that, as I think I hear you saying,
educators seem (in general) to be OK with taking advantage of people who
supply software technology to make their jobs easier but are not OK with
others wishing to take advantage of their good nature as altruistic
participants in the social discourse.

And at the end, I just find this very interesting, not necessariiy negative
or problematic.

On 3/20/06, Judy Perry [EMAIL PROTECTED] wrote:

I suspect that there are remarkably few educators who would apply
to themselves the sentiment that they seem to demand of software
developers.


--
~~
Dan Shafer, Information Product Consultant and Author
http://www.shafermedia.com
Get my book, Revolution: Software at the Speed of Thought
From http://www.shafermediastore.com/tech_main.html
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Sarah Reichelt
On 3/21/06, Rob Cozens [EMAIL PROTECTED] wrote:

 G'day Sarah,

  In my experience, it's probably due to never passing values by
  reference.

 I'm curious as to why you eschew passing by reference.

 If one needs to pass large variables, why incur the overhead of
 duplicating the value of the variable before passing it?  And if a
 variable value needed at one level is derived from a routine nested
 several calls deep, simply passing the variable by reference through
 the nested calls is the simplest way to get the value back to the
 original caller.


It's not a philosophy, more ignorance :-)

I haven't ever really tested it and I have an instinctive feeling that
functions should be self-sufficient and shouldn't change anything
outside them. Maybe it will suit me better in some circumstances.

Cheers,
Sarah
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Sarah Reichelt
Well I think you are right - there would be better ways to split out
segments of the script, and if I find more than one routine neededing
to do the same things, I go to the effort of doing it. However at the
moment, I am mainly concerned with converting HyperCard scripts to
Rev, and so I like to change as little as possible, to make sure I
don't mess anything up.

Cheers,
Sarah



On 3/21/06, Geoff Canyon [EMAIL PROTECTED] wrote:
 Do you have an example? I agree that if you end up passing in a
 handful of arguments by reference, you haven't accomplished much by
 breaking out the routine. The question is if there isn't a better way
 to slice the routine, where that wouldn't be necessary.

 On Mar 20, 2006, at 4:29 AM, Sarah Reichelt wrote:

  In my experience, it's probably due to never passing values by
  reference. If I am working on a routine that generates multiple
  variables, then acts on them, it is easier to keep it all together
  than to try and transfer more than one variable back  forth between
  handlers  functions.
 
  A separate function is great if it only has to return one variable,
  but as soon as it acts on more than one, I find it easier to leave
  that code as part of the main handler.
 
  Of course, if a segment of code is used by more than one handler, it's
  worth the effort to split it out, but otherwise, I'm not too fussed
  about keeping handlers small. Good commenting can overcome any
  problems interpreting it later :-)

 ___
 use-revolution mailing list
 use-revolution@lists.runrev.com
 Please visit this url to subscribe, unsubscribe and manage your subscription 
 preferences:
 http://lists.runrev.com/mailman/listinfo/use-revolution

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Mark Smith
I think the point is that when a variable is passed to a function/ 
handler 'normally', the data in it is duplicated, and if the data is  
big, this is not as efficient as passing it by reference - obviously,  
if you need to change the data in the called function/handler, this  
may have unwanted side-effects, in  which case passing it normally is  
going to be better.


Mark


On 21 Mar 2006, at 02:20, Sarah Reichelt wrote:


On 3/21/06, Rob Cozens [EMAIL PROTECTED] wrote:


G'day Sarah,


In my experience, it's probably due to never passing values by
reference.


I'm curious as to why you eschew passing by reference.

If one needs to pass large variables, why incur the overhead of
duplicating the value of the variable before passing it?  And if a
variable value needed at one level is derived from a routine nested
several calls deep, simply passing the variable by reference through
the nested calls is the simplest way to get the value back to the
original caller.



It's not a philosophy, more ignorance :-)

I haven't ever really tested it and I have an instinctive feeling that
functions should be self-sufficient and shouldn't change anything
outside them. Maybe it will suit me better in some circumstances.

Cheers,
Sarah
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your  
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread James Spencer


On Mar 20, 2006, at 9:01 PM, Mark Smith wrote:

I think the point is that when a variable is passed to a function/ 
handler 'normally', the data in it is duplicated, and if the data  
is big, this is not as efficient as passing it by reference -  
obviously, if you need to change the data in the called function/ 
handler, this may have unwanted side-effects, in  which case  
passing it normally is going to be better.


The problem you raise here is handled in more traditional languages  
by declaring the reference to be constant.  It strikes me that it  
would not be a big change to expand the use of the constant  
keyword.  Then in situations such as Sarah was talking about the  
handler/function would be declared as not changing the referred to  
variable, something like


on myHandler constant @pByReferenceParameter
  -- following then should cause compiler error
  add 1 to @pByReferenceParameter
end myHandler

There is, of course, another use for references besides the  
efficiency of not having to copy large data structures: returning  
more than one value.  This use doesn't suffer from the concern Sarah  
raises about having external effects as, when used this way, the  
parameter passed in should be empty.  There isn't, of course, any  
guarantee of this other than the caller being careful and writer of  
the called function being careful to document that the parameter is  
used for output only.


Spence

James P. Spencer
Rochester, MN

[EMAIL PROTECTED]

Badges??  We don't need no stinkin badges!

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Phil Davis
Ever the metaphorical thinker, this reminds me of good gun safety 
practices (aka ways NOT to shoot yourself in the foot) - it's all in 
knowing how to control a powerful tool.


Phil Davis

(meant in a lighthearted way and limited strictly to the parallel 
observed - not intended to engender discussion/debate about guns)



Mark Smith wrote:
I think the point is that when a variable is passed to a function/ 
handler 'normally', the data in it is duplicated, and if the data is  
big, this is not as efficient as passing it by reference - obviously,  
if you need to change the data in the called function/handler, this  may 
have unwanted side-effects, in  which case passing it normally is  going 
to be better.


Mark


On 21 Mar 2006, at 02:20, Sarah Reichelt wrote:


On 3/21/06, Rob Cozens [EMAIL PROTECTED] wrote:



G'day Sarah,


In my experience, it's probably due to never passing values by
reference.



I'm curious as to why you eschew passing by reference.

If one needs to pass large variables, why incur the overhead of
duplicating the value of the variable before passing it?  And if a
variable value needed at one level is derived from a routine nested
several calls deep, simply passing the variable by reference through
the nested calls is the simplest way to get the value back to the
original caller.



It's not a philosophy, more ignorance :-)

I haven't ever really tested it and I have an instinctive feeling that
functions should be self-sufficient and shouldn't change anything
outside them. Maybe it will suit me better in some circumstances.

Cheers,
Sarah
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your  
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your 
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-20 Thread Judy Perry
Holy Batcrap, Dan!

Like, is it a full moon?  Are the planets in alignment??  Did I miss a
supernova somewhere obvious???

:-)

You know, I have always held that rumours of our supposedly concrete
disagreement status are greatly exaggerated.

Yeah, I've seen something very like what you are talking about (Point No.
1, that is; probably the others as well).  Something very similar is why,
although funding has been approved, my FrankenLab won't be fixed anytime
soon, if at all.

As for your points 2  3 (which to me seem to be the samething), I've
seen that too.  While in the midst of a rather painful msidt (see how it
relates to midst???  msidt = master of science in instructional design and
technology; sorry for the pun; it was a really dreadful program), we
students were in the midst of this small (as in, *really* small) unit on
copyrighted materials and fair use in the classroom, and a rather vocal
seeming majority of my fellow students stridently held that their mission
to educate trumped basic property rights.  When I objected, I was
basically called a pie in the sky and ivory tower higher-ed type.

And I'll bet their software budget is bigger than mine.

Judy

On Mon, 20 Mar 2006, Dan Shafer wrote:

 OMG, Judy, two things we can agree on in, what?, less than a month? Perhaps
 the end of the cycle is imminent!

 :-)

 I spent two years once trying to sell a product into the education market.
 (I use quotation marks because in my experience -- which may well have been
 unique for all I know -- there is no such thing as a market called
 education.) Here's what I ran into (enough years ago that some of it may
 no longer be valid and it specifically applies to K-12, not secondary):

 1.  The decision-maker is often hard to find. This was a real deal-blocker
 for us. I'm not kidding. In one case, we found out that the key decision
 maker in determing what software a school district (a large one, at that)
 would buy was the nephew of the superintendent who worked as an outside
 consultant. He wasn't on an org chart and we could not make a direct
 presentation to him. That was the extreme but it was only a matter of
 degree.

 2.  Educators often cried poor-mouth, seeking deep, deep discounts that
 would have resulted in our inability to stay in business but then they also
 wanted reliable tech support (including pre-sale) and training.

 3.  Too often, educators felt justified taking our proprietary software and
 duplicating it for their fellow educators, on the same basis as #2, i.e.,
 they were under-funded and under-paid.

 Now I'm not going to argue that educators are adequately compensated let
 alone overpaid. And I know that in the U.S. at least the priority we place
 on education in our budgets is horrific in contrast to the lip service we
 pay to the importance of education in our society. But even programmers have
 to eat (though they seem able to subsist of Jolt and Twinkies for extended
 periods of time, with the odd pizza tossed in for good measure.) But what
 does seem to me to be the case is that, as I think I hear you saying,
 educators seem (in general) to be OK with taking advantage of people who
 supply software technology to make their jobs easier but are not OK with
 others wishing to take advantage of their good nature as altruistic
 participants in the social discourse.

 And at the end, I just find this very interesting, not necessariiy negative
 or problematic.

 On 3/20/06, Judy Perry [EMAIL PROTECTED] wrote:

 I suspect that there are remarkably few educators who would apply
 to themselves the sentiment that they seem to demand of software
 developers.


 --
 ~~
 Dan Shafer, Information Product Consultant and Author
 http://www.shafermedia.com
 Get my book, Revolution: Software at the Speed of Thought
 From http://www.shafermediastore.com/tech_main.html
 ___
 use-revolution mailing list
 use-revolution@lists.runrev.com
 Please visit this url to subscribe, unsubscribe and manage your subscription 
 preferences:
 http://lists.runrev.com/mailman/listinfo/use-revolution


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-19 Thread Mark Wieder
Geoff-

Saturday, March 18, 2006, 1:24:50 PM, you wrote:

 I've never seen a hundred-line routine that wouldn't be better as
 five twenty-line routines, each of which could be documented with a
 line of code. Perhaps even ten ten-line routines.

It's probably my forth background, but I'm mildly allergic to routines
that don't fit in their entirety onto my screen.

-- 
-Mark Wieder
 [EMAIL PROTECTED]

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-19 Thread Marielle Lange
If you aren't happy with the tool, then just don't use it. It's  
that simple.


It is not very wise to say so. If all dissatisfied persons on this  
list followed your advice, in the present context, this could cost  
runrev very many clients. My personal view on this is that it is  
better to express the reasons for dissatisfaction so that the  
problems can be resolved.


What I have seen on this list is that you just want to get rid of the  
persons who tell you there is a problem... and keep your problem. I  
am interested in using the excellent product that revolution is. I am  
not interested to have to accept to deal with problems like the  
present ones for the months to come for the priviledge to use it.


For the record, Richmond was banished. He was brought back only  
because I did intercede for him. The reason he ended up using cursed  
language is because of his growing frustration at being asked to shut  
it up on his discourse on open source. Honestly, your very biased and  
overtly hostile email is an invitation for insults. A proof of this  
is that you already received emails back when you wrote a similar  
email to a user who had the very stupid idea to do the same thing as  
me, express a criticism.


http://mail.runrev.com/pipermail/use-revolution/2005-December/ 
071769.html

Why isn't Rev more popular?
Jerry Saperstein runrev at civildiscovery.com
Mon Dec 5 20:30:16 CST 2005
Criticism of Revolution generally apparently is generally
disapproved of here. I've seen a number of valid criticisms  
dismissed in the

same way as yours have been.


And what argument did you use to dismiss her claim... nothing but  
Innuendo and defamation, something *far too frequent* on this list.

http://thread.gmane.org/gmane.comp.ide.revolution.user/71131
From: Chipp Walters [EMAIL PROTECTED]
Subject: Re: Why isn't Rev more popular?
Newsgroups: gmane.comp.ide.revolution.user
Date: 2005-12-06 04:59:20 GMT (14 weeks, 5 days, 16 hours and 35  
minutes ago)
You wouldn't be the Jerry Saperstein of Font Bank fame who was  
accussed
back in the 90's of stealing clipart intellectual property and  
reselling

it...would you? If so, how'd that turn out?



The fact that you discredited her in this unacceptable ways probably  
didn't help. She ended up insulting you. I won't insult you. But  
being in the position Richmond was put or Jerry was put, I understand  
their reaction. I don't approve it. But I understand how they came to  
explode. They did it because some not so acceptable means were used  
to discredit them and there was nothing they could say anymore to  
have the truth restored. Fortunately for me, it is probably less easy  
to discredit the person who contributed this to the community:
http://revolution.widged.com/wiki/tiki-index.php? 
page=TutorialsTeacherManual

http://revolution.widged.com/stacks/
http://codes.widged.com/

I am a defender of runrev. And it is BECAUSE I am a defender of  
runrev that I do take the time to speak out and denounce problems  
that contribute to keep persons AWAY from this excellent product. I  
don't know what game you play Chipp, Dan, Richard, but it really  
looks like you are trying to prevent the members of the non profit  
community to express their views and describe their needs on this  
list. Anytime they do, they are discredited.


Richard said he was sorry to see freeGui not more popular.  
Apparently, he was not sorry defaming the freeGui project leader on  
the metacard list:

http://mail.runrev.com/pipermail/metacard/2006-February/009068.html
While it's hard to find a post from you regarding Rev in any forum  
which

doesn't turn it into an opportunity to express your negative opinions
about the product, in this case it seems Kevin chose to finish a  
thread

that was started here by writing to an entirely different list.  My
apologies for thinking that this latest post from you was like the
dozens before it.


For the record, Richmond didn't hack to the RR website. I am  
completely fed up to see the likes of you transform the truth on this  
list and discredit persons who have been deprived from the right to  
defend themselves. No hack was required to see the 2.7 announce, a  
simple search on google was enough. Richmond lacked of judgement, I  
agree. But he clearly didn't mean to do any harm. If he could access  
to this page, the error was the one of runrev's not his (the page,  
was NOT password protected and if you reached it via google, you had  
no way to know you were accessing information you were not supposed  
to access). The fact that he emailed a copy of the 2.7 announce on  
the list didn't justify to see him banish. Anybody else would have  
done so, there would have been no consequences (yes, I know, most  
persons wouldn't have done so, but that's a different issue).


For the record, Xavier doesn't really have the opportunity to defend  
himself on this list because Kevin recently sent him an email to tell  
Xavier that if 

Re: Making the move...

2006-03-19 Thread Chipp Walters
Yep, I've heard that before, but frankly, for me, I'd rather keep it all 
in one, unless there's a really good reason to separate into multiple 
handlers (as in creating more reusability). I find it much easier to 
debug code I've written this way than hunting through the message path 
for the 15 or so functions/handlers I've written trying to make things 
'more simple.' Just a difference in coding style.


In fact, typically I'll write code procedurally in a longer handler, 
then only break it up if/when I know I need to do part of the same thing 
again. Like most of us, I'd rather not code twice.


Even though, I've got libraries with over 50 handlers/functions.

-Chipp

Mark Wieder wrote:

Geoff-

Saturday, March 18, 2006, 1:24:50 PM, you wrote:



I've never seen a hundred-line routine that wouldn't be better as
five twenty-line routines, each of which could be documented with a
line of code. Perhaps even ten ten-line routines.


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-19 Thread Chipp Walters

Marielle,

Notwithstanding your earlier private unsolicited (and unresponded to) 
rants to me (and others) on why you hate Revolution, it is obvious you 
like to have the last...oh 1000 words.


Bravo.

-Chipp

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-19 Thread Mark Smith
Marielle, I really don't get how anyone thinks that genuine and  
justified criticism of Revolution is somehow not tolerated on this list.



On 19 Mar 2006, at 22:17, Marelle Lange wrote:



What I have seen on this list is that you just want to get rid of  
the persons who tell you there is a problem... and keep your  
problem. I am interested in using the excellent product that  
revolution is. I am not interested to have to accept to deal with  
problems like the present ones for the months to come for the  
priviledge to use it.




People do almost nothing other than discuss problems on this list -  
some are problems of comprehension or experience, some are problems  
with the docs, some are bugs...they get discussed quite reasonably,  
whatever they are...but then



http://mail.runrev.com/pipermail/use-revolution/2005-December/ 
071769.html

Why isn't Rev more popular?
Jerry Saperstein runrev at civildiscovery.com
Mon Dec 5 20:30:16 CST 2005
Criticism of Revolution generally apparently is generally
disapproved of here. I've seen a number of valid criticisms  
dismissed in the

same way as yours have been.



And what argument did you use to dismiss her claim... nothing but  
Innuendo and defamation, something *far too frequent* on this list.



http://thread.gmane.org/gmane.comp.ide.revolution.user/71131
From: Chipp Walters [EMAIL PROTECTED]
Subject: Re: Why isn't Rev more popular?
Newsgroups: gmane.comp.ide.revolution.user
Date: 2005-12-06 04:59:20 GMT (14 weeks, 5 days, 16 hours and 35  
minutes ago)
You wouldn't be the Jerry Saperstein of Font Bank fame who was  
accussed
back in the 90's of stealing clipart intellectual property and  
reselling

it...would you? If so, how'd that turn out?




The fact that you discredited her in this unacceptable ways  
probably didn't help. She ended up insulting you. I won't insult  
you. But being in the position Richmond was put or Jerry was put, I  
understand their reaction. I don't approve it. But I understand how  
they came to explode. They did it because some not so acceptable  
means were used to discredit them and there was nothing they could  
say anymore to have the truth restored. Fortunately for me, it is  
probably less easy to discredit the person who contributed this to  
the community:
http://revolution.widged.com/wiki/tiki-index.php? 
page=TutorialsTeacherManual

http://revolution.widged.com/stacks/
http://codes.widged.com/



I just reviewed the Jerry Saperstein thread, and I think the same  
thing I thought at the time : Jerry came on with one of the most  
obvious pieces of transparently provocative trollery I've seen. Her  
assertion was that Revolution was 'unusable for business apps' - a  
term never explained, despite many requests for clarification, and no  
examples of problems she had encountered were ever forthcoming. She  
then insinuated, fairly clearly, that claims made by list members as  
to the fruits of their labours in Revolution were lies. It's not  
surprising she got short shrift.




I am a defender of runrev. And it is BECAUSE I am a defender of  
runrev that I do take the time to speak out and denounce problems  
that contribute to keep persons AWAY from this excellent product. I  
don't know what game you play Chipp, Dan, Richard, but it really  
looks like you are trying to prevent the members of the non profit  
community to express their views and describe their needs on this  
list. Anytime they do, they are discredited.




I am a non profit user of Rev...I simply don't understand how Chipp,  
Dan and Richard or anyone else are supposed to be discrediting  
anyone, or preventing anyone from describing their needs.




Dan's email on Ruby was WOW. Very kindly, as usual, he went to  
check up some very popular resource out there, and came back to  
tell us that it was not worth checking up. Ruby was *far too  
complex*, *nothing useful could be done with it*, *revolution could  
be used the same way Ruby is*. But know that I am *very*  
uncomfortable with your practices within *this* community, where  
you too often take advantage of the credulity of the users.



Then I discoverd Ruby on Rails. For me -- and certainly there are
other frameworks out there that others may favor -- no other Web app
development approach comes even close. - Dan Shafer
?

I'm really in no position to comment on Richmond or Xaviers  
differences with RunRev, so I won't.


Honestly, I'm wondering if you and I are reading the same list!

Baffled,

Mark


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


RE: Making the move...

2006-03-19 Thread Lynn Fredricks
Hey gang,

Im not naming names but Im feeling some heat when it's about time I enjoy a
nice Sunday evening with my family - lets leave the past in the past and
kill this thread. If you want to continue on an individual basis on this
topic, then please email each other offlist.

Best regards,

Lynn Fredricks
Worldwide Business Operations
Runtime Revolution, Ltd


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


RE: Making the move...

2006-03-18 Thread Lynn Fredricks
Hi Chipp,

Yes, this is a very relevant list, though some things have changed at bit.

 He gave 3 reasons for this:
 
 1) The culture. Great software is typically created by a 
 small group of only a few developers-- not the Japanese way 
 of throwing manpower at a problem. Furthurmore, typcially 
 good developers are not very social and can be obstinate 
 (duh!), which again flys against the culture. And, the 
 program all night when on a roll, then sleep all day type 
 would never fly in a Japanese corporation.

There is a growing studio mentality in Japan and also, the weirdness that
is family owned business. A few years ago, a merger between Sega and Bandai
failed because Bandai is a family run business, and Sega is more mainstream
(actually they have a more hardcore, no prisoners culture comparable to
Oracle).

What Chipp is referring to above is interesting because, it rarely happens
in the office but it can happen in incremental improvements happening on the
floor -- where suits rarely go. A surprising amount of those incremental
improvemetns come from the floor.


 2) It is very difficult for startup companies to begin in 
 Japan. There are huge incorporation fees, plus it's almost 
 impossible to go public, so it's difficult to find investors, 
 Because the 'equity' of a software startup is not 'tangible', 
 it's very difficult to get banks to become involved, and a 
 good banking relationship is very important to startups.

This has gotten better in some ways, worse in others. When the Japanese
bubble economy popped, quite a few banks simply closed, merged or were
bought out. While there is now a VC climate in Japan, I don't think its
really made up for the hard times.

At one time simple incorporation stamp cost you $10K. Now it is possible to
get by with much less, or create a foreign subsidiary without the huge paid
in capital requirements of yore.

 3) Lastly, the best computer languages were based in English, 
 and very different from the way Japanese read and write.

And in addition, the computer industry was dominated by the NEC 9800
platform, which was close but not quite the same as the AT architecture here
- dominated as in Microsoft made versions of DOS and Windows for it. Id say
this is one of the reasons why the Mac maintained a foothold longer in Japan
than in other places - the mainstream x86 architecture had to compete with
the NEC platform.

 I imagine much of this has changed in the past 10 years or so 
 since we last talked, but I still believe many of his 
 concerns have some validity. Of course, as recently as a 
 couple of years ago, I toured a new CG Manga studio where 
 people slept on the floor under the desks in makeshift 
 tent-beds and generally had a more 'western' feel like many 
 game studios do today.

Yes, and I think there is a certain infectiousness to this as well, esp in
creative industries.

 Of course, as they say, the proof is in the pudding. And, 
 we've yet to see any big mainstream programs come out of 
 Japan. But, there are some. 
 I believe Shade 3D is a Japanese program (Lynn, you may know 
 about this?).

Yes, and while it is a great product, the mid-market (and up) marketspace
for 3D applications, as a vertical market, has been in a total bloodbath for
years -- and its gotten much worse with the acquisition of Alias. Shade is
an excellent example. Its quite good, esp if you come from a CAD or
architecture background. E-frontier, makers of Shade, acquired Curious Labs
(makers of Poser) now little over two years ago, and they are making some of
those famous Japanese improvements to Shade to adapt to the US market. They
also have a good US staff that really know the 3D industry here.

Another piece of software that is Japanese is --- the Ruby language.

My first company did a lot of work with early Japanese game companies (back
in the Super Nintendo days) and while the underlying software was incredibly
fast (written mostly in assembly, with very little of that wimpy C or C++
stuff ;-)) - it seemed that almost all the games were exactly the same,
except for some funny graphics and backstory.

Best regards,


Lynn Fredricks
Worldwide Business Operations
Runtime Revolution, Ltd



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-18 Thread Mark Wieder
Lynn-

Saturday, March 18, 2006, 6:33:05 AM, you wrote:

 Another piece of software that is Japanese is --- the Ruby language.

Ah... you beat me to it. I was going to chime in about Ruby.

 Lynn Fredricks
 Worldwide Business Operations
 Runtime Revolution, Ltd

...love the new sig...

-- 
-Mark Wieder
 [EMAIL PROTECTED]

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-18 Thread Marielle Lange

Hi Mark,

Any chance to see you post the relevant code on this list?

I read the ECMI document but don't remember the part describing  
conventions for describing the API in a way similar to the one  
outlined in the javadoc. Is it possible for you to cut  paste the  
relevant excerpt on this list... or give pointers to page numbers if  
too long?


Many thanks,
Marielle

 


Marielle Lange (PhD),  Psycholinguist

Alternative emails: [EMAIL PROTECTED],

Homepage
http://homepages.widged.com/mlange/
Easy access to lexical databaseshttp:// 
lexicall.widged.com/
Supporting Education Technologists  http:// 
revolution.widged.com/wiki/


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-18 Thread Geoff Canyon


On Mar 17, 2006, at 1:20 PM, Mark Wieder wrote:


...sure there is. You have to roll your own, but it's not that much
transcript code. My libraries generate their own documentation through
a javadoc-like mechanism. Check out, for example, my ArchiveSearch
plugin on revonline and open the libDispatcher library. Click on the
API button.


I strive to make my functions/handlers small enough that a single  
line of documentation is sufficient. Actually size isn't so much of a  
factor as the single-purpose aspect. If a function or handler has a  
single purpose, generally it can be described in a single sentence.  
Then I include that line as a comment after the definition:


on setupHOOTClasses -- creates an array (sMessageArray) of the  
messages each class can receive

on startHOOT -- initializes HOOT and sets it as a front script

Then there are the handlers that are self-explanatory:

on stopHOOT
on hideNavigator

I've never seen a hundred-line routine that wouldn't be better as  
five twenty-line routines, each of which could be documented with a  
line of code. Perhaps even ten ten-line routines.


regards,

gc
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-18 Thread Ken Ray
On 3/18/06 2:00 PM, Marielle Lange [EMAIL PROTECTED] wrote:

 Hi Mark,
 
 Any chance to see you post the relevant code on this list?
 
 I read the ECMI document but don't remember the part describing
 conventions for describing the API in a way similar to the one
 outlined in the javadoc.

It's not similar to javadoc, but the method for describing the API to the
handlers in a library at documented in the uRIP[interface] property of the
ECMI specifications.

Ken Ray
Sons of Thunder Software
Web site: http://www.sonsothunder.com/
Email: [EMAIL PROTECTED]

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-17 Thread Jim Ault
Hey Dan, thanks for the quick note.
I think I get now.  8080 is already open.  Launch this and the metacard
stack listens without changing any control panel stuff.

Just tried the following:

Safari
http://localhost:8080/~jault/
=== stack running as an app (dbl clk) no problems


Explorer from a Windows XP computer on my local network
Firewall OFF
http://192.168.15.100:8080/~jault/
=== stack running as an app (dbl clk) CRASHED metacard

Exception:  EXC_BAD_ACCESS (0x0001)
Codes:  KERN_PROTECTION_FAILURE (0x0002) at 0x




From FireFox on the same Mac
http://192.168.15.100:8080/~jault/
=== CRASHED metacard
EXC_BAD_ACCESS (0x0001)
KERN_PROTECTION_FAILURE (0x0002) at 0x


From Safari on the same Mac
http://192.168.15.100:8080/~jault/
=== CRASHED metacard
Safari can¹t open the page ³http://192.168.15.100:8080/~jault/². The error
was: ³lost network connection² (NSURLErrorDomain:-1005)

now I am confused.

Jim Ault
Las Vegas


On 3/16/06 11:48 PM, Dan Shafer [EMAIL PROTECTED] wrote:

 Well, at least from the mc stack, you just run it and it seems to intercept
 the call on the designated port. You can manually change the port in the
 launch stack as well.
 
 PRetty cool stuff.
 
 
 On 3/16/06, Jim Ault [EMAIL PROTECTED] wrote:
 
 
 
 
 On 3/16/06 6:54 PM, Richard Gaskin [EMAIL PROTECTED] wrote:
 The default port in mchttpd is 8080 -- on my Mac I use:
 
  http://localhost:8080/
 
 Woiks very good... cool.
 
 
 Is there a tutorial about how to put this in action on my G4 that has a
 static IP?  I know that Apache would be the default receiver of 8080
 traffic
 and I am definitely not a config-mechanic.
 
 
 --
 ~~
 Dan Shafer, Information Product Consultant and Author
 http://www.shafermedia.com
 Get my book, Revolution: Software at the Speed of Thought
 From http://www.shafermediastore.com/tech_main.html
 ___
 use-revolution mailing list
 use-revolution@lists.runrev.com
 Please visit this url to subscribe, unsubscribe and manage your subscription
 preferences:
 http://lists.runrev.com/mailman/listinfo/use-revolution


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-17 Thread Marielle Lange
The missing link is the killer app made with it.  RoR was virtually  
unheard of before BaseCamp took off, showing the world how powerful  
and flexible RoR is.  If we had an app of similar scope and appeal  
I have no doubt that as long as the engine is free for such uses  
and the scripts are open source it would attract considerable  
attention.


The possibilities have been there for about 10 years.

So why is it that Java is now in position 1 and Ruby in position 22  
of the most popular programming languages and that none of xtalk,  
hypertalk, transcript is mentioned anwhere in the 100 most popular  
ones (though RealBasic and SmallTalk are)?

http://www.tiobe.com/tpci.htm

Yes, runrev product is great in the sense that it is easier to use by  
beginner programmers than many other things on the market. It is also  
great in the sense that it let advanced programmers do more in less  
time (but not necessarily *better*). It is also great in the sense  
that it let you do out of the box what would take hours if not days  
to set up in other environments.


On this list, all discussions always come back to the same thing.  
This product is so great, this is so evident that everybody should  
adopt it... Runrev too has appeared to think that  to have a great  
product is enough and they had to do nothing but let it sell itself.  
I am afraid, to have a great product is not enough.


What you get with Java, Ruby, Ajax that you don't get with runrev is  
the following.



1) Re-usable LIBRARIES.

Honestly what I have read recently on how revolution is so much  
superior to Director or Java is just a *BIG* joke. Agreed, revolution  
let  you write stuff rapidly. But you have to write the same stuff  
again and again and again and again. But what java does is let you  
write it ONCE and REUSE it again and again and again.



2) Rich and easy to access documentation

If you want to use a java library written by somebody else, simple,  
you get access to the API online and you know what method to call and  
how. You don't need to know *anything* about the inner workings of  
the library. Why is it? Because some some conventions have been  
created which let you comment your script in a very efficient way,  
where the API doc can be automatically generated from these comments.  
http://java.sun.com/j2se/javadoc/. There is *NOTHING* even close to  
this in revolution. Here, if you want to find your way through  
revolution it is by checking up the list as much as you can and post  
your questions on the list (which is an important problem for non  
English speaking persons). These nice little chats on the list are  
without doubt helping both the sender and the receiver feel very good  
about themselves, so priviledged to be in such a great community.  
Let's face it. This way of doing is plain inefficient compared to the  
way of doing in ruby or java communities.



3) Member's sense of investment in making their work freely available

Yes, you can do fantastic stuff with revolution. But you have to  
start from zero and do everything by yourself.
Because of all the effort, it is only worth it if you plan to sell  
your application to a small numbers of high-paying clients.


So Richard, why is it that sourceforge project you are admin of is  
still empty? It was registered in 2001.

http://sourceforge.net/projects/opn-repository
A project to create a publicly accessible library of handlers for  
the xTalk family of languages. The immediate aim of this project is  
to create a robust library of handlers for the cross platform  
Metacard/RunRev xTalk family of products.
I had a chance to see David's (Bovil) library of handlers: Very  
impressive.


So, Lynch, if you have written such nice and reusable libraries for  
providing better table objects, why not share it with others? Maybe  
then, rather than have each one of us repeat your work, we may be  
able to start, collaboratively, construct tools of this quality:

http://jcharts.sourceforge.net/samples/bar.html
http://big.faceless.org/products/graph/index.jsp
http://www.jfree.org/jfreechart/samples.php
http://www.eteks.com/jeks/index.html
http://www.thechiselgroup.org/projects


4) Structure that encourages and facilitates collaboration

You can, in fact turn your work into reusable libraries, with a bit  
of experience in writing such stacks. People like Eric, Scott, and  
many others have very generously contributed high quality demo  
stacks, but the number of libraries available is just ridiculous  
compared to the ones on rubyforge/sourceforge. In sharp contrast with  
the ruby and java community, these libraries are not shared, there is  
nothing like rubyforge or sourceforge where you can easily provide  
information about your project and receive feedback on them. There is  
nothing like rubyforge or sourceforge where you can get to know of  
the existing projects and get to propose your collaboration.


On top, though it is possible to write 

Re: Making the move...

2006-03-17 Thread Mark Wieder
Marielle-

Friday, March 17, 2006, 4:44:16 AM, you wrote:

 many Japanese management concepts such as Total Quality Control,
 Quality Control circles, small group activities, labor relations. Key
 elements of Kaizen are quality, effort, involvement of all employees,
 willingness to change, and communication.

Having been involved with Total Quality initiatives, Quality Control
Circles, etc, on this side of the pond I can say from experience that
they are doomed to failure because of underlying cultural differences.
Labor and social relationships are not structured in western societies
to provide the level of trust and support required to allow them to be
effective.

-- 
-Mark Wieder
 [EMAIL PROTECTED]

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


RE: Making the move...

2006-03-17 Thread Lynn Fredricks
  many Japanese management concepts such as Total Quality Control, 
  Quality Control circles, small group activities, labor 
 relations. Key 
  elements of Kaizen are quality, effort, involvement of all 
 employees, 
  willingness to change, and communication.
 
 Having been involved with Total Quality initiatives, Quality 
 Control Circles, etc, on this side of the pond I can say from 
 experience that they are doomed to failure because of 
 underlying cultural differences.
 Labor and social relationships are not structured in western 
 societies to provide the level of trust and support required 
 to allow them to be effective.

Putting on my Proactive (http://www.proactive-intl.com) hat here on one of
my favorite topics :-)

Ill preface this by saying I lived in Japan for six years, have an office in
Japan, Japanese spouse and bi-lingual family household. We have a good mix
of Japanese staff. My kid has been cleaning my clock in spoken and written
Japanese for years :-(

I think almost all Japanese initiatives fail in the US for the same reason
why many foreign endeavors don't make it in Japan - they werent adapted into
processes towards a specific goal. And they apply differently in different
industries, because there is a different mindset by industry - the
automobile industry vs software is a perfect one.

Total Quality Management didn't originate in Japan, but it is worshipped
there. Japanese society is built around cooperation, unity, and fair
treatment within the group - and you disappoint and fail the group if your
product doesn't improve. It doesn't nourish creativity however, though the
government has taken steps in their education system to help rectify that.

There are some very good software products from Japan, but it isnt a culture
that nurtures a maverick mentality that can result in lots of super
programmers. You could point to console games as an industry dominated by
the Japanese, but I think if you really looked at the way most of those
games are structured (and that they license a lot of foreign 3D technology),
you would be less impressed.

But to go back to the point - adaptions Ive seen have been terrible - either
self defeating or utterly silly. I think there are quality measures that can
be gleaned and adapted to a certain point, with good results. Its just
extremely rare.


Best regards,


Lynn Fredricks
Worldwide Business Operations
Runtime Revolution, Ltd



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-17 Thread Richard Gaskin

Marielle wrote:
What you get with Java, Ruby, Ajax that you don't get with runrev is  
the following.


1) Re-usable LIBRARIES.

Honestly what I have read recently on how revolution is so much  
superior to Director or Java is just a *BIG* joke. Agreed, revolution  
let  you write stuff rapidly. But you have to write the same stuff  
again and again and again and again. But what java does is let you  
write it ONCE and REUSE it again and again and again.


Coding for reuse is a choice. There's a lot of Java out there that can
barely be used, let alone reused. :)

I rarely write the same routine in Transcript more than once, and every 
app I write is completed with considerably higher ROI than the last 
because of the ease of reusing code libraries.  In my most recent 
project I would estimate that some 70% of the code base is in reusable 
libraries.


There's even a Scripter's Scrapbook that Hugh Senior wrote in Rev to 
encourage even greater code reuse (with a jaw-droppingly complete 
feature set) at http://www.flexiblelearning.com/ssbk.htm.


Stephen McConnell's Code Complete 2 offers a great insight into coding
for reuse (among many other things), and just about anything from him is
chock full o' good ideas.

I've touched on reuse in my presentations at Rev conferences, and it
would probably be useful to also address this in greater depth at
revJournal.

In the meantime, Extending the Runtime Revolution Message Path at
http://www.fourthworld.com/embassy/articles/revolution_message_path.html
introduces the mechanics of implementing libraries, and my Handy
Handlers series at http://www.revjournal.com/tutorials/index.html
discusses the style side of crafting handlers with an emphasis on
generalized reuse.

It should be noted that while the specifics of coding for reuse in
Transcript often rely on mechanisms unique to the language, those
mechanisms are simple to work with (e.g. start using libMyStuff) and 
the patterns governing reuse are pretty much the same as for other 
procedural languages (error-checking params, conscious source-to-dest 
param order, useful defaults for optional params, etc.).


Any developer thinking ahead and exercising a little self-discipline can
get the same level of benefit of code reuse in Transcript as in just
about any procedural language, arguably more so in many cases given
Transcript's self-documenting nature and the simplicity of using library
stacks.

That said, there's a fine line being drawn here.  On the one hand you
seem to request a professional level of self-discipline from those who
publish libraries, while elsewhere suggesting that Rev be used by more
newcomers and non-professionals.  As long as there are people who
haven't yet made a million mistakes, they will code in ways that don't
prevent them. :)



2) Rich and easy to access documentation

If you want to use a java library written by somebody else, simple,  
you get access to the API online and you know what method to call and  
how. You don't need to know *anything* about the inner workings of  
the library. Why is it? Because some some conventions have been  
created which let you comment your script in a very efficient way,  
where the API doc can be automatically generated from these comments.  
http://java.sun.com/j2se/javadoc/. There is *NOTHING* even close to  
this in revolution.


Again, this is a matter of choice on the part of the developer.  Some
are simply more diligent documenters than others.

While the number of lines needed to extract APIs from a Java code base
is so great that Sun needs to provide a tool for it, getting a list of
handlers from a script in Transcript can be done in just a few lines
(see the MC IDE's Script Editor or Geoff Canyon's post at
http://lists.runrev.com/pipermail/use-revolution/2006-March/078496.html).
 Modifying those routines to also include params would be trivial.

But for such extraction to be useful the key is to provide meaningful
parameter names.  Remember that Java's a typed language so the
prototypes will tell you more about a param than its name alone will.
So again, this is a choice and some do it better than others. KR-style
single-letter arguments won't tell you very much. :) (A few tips on
naming conventions are shared at
http://www.fourthworld.com/embassy/articles/scriptstyle.html).

Taking this notion one step further, the Rev Interoperability Project
(RIP) at http://groups.yahoo.com/group/revInterop/ offers guidelines 
for libraries to include API documentation, and in a way that makes it 
relatively simple for a single doc-reader stack to easily display the 
API for any RIP-savvy library.


Conventions exist for both Java and Rev; they're only as useful as they 
are adopted, and Java is used by more professionals for whom the 
benefits of self-discipline pay bigger dividends.




3) Member's sense of investment in making their work freely available

Yes, you can do fantastic stuff with revolution. But you have to  
start from zero and do 

Re: Making the move...

2006-03-17 Thread Chipp Walters

Marielle,

Most of us know, you have a running feud with those at RunRev. If you 
aren't happy with the tool, then just don't use it. It's that simple.


Perhaps there aren't as many libraries available for Transcript, but who 
says using only reusable libraries is the only way to code quickly? I 
can still develop my apps significantly faster than enterprise customers 
who code in Java and .NET (even with all their free libraries!).


As Richard has implied over and over, it's about ROI for the client. If 
I can program some apps faster than another developer, then I provide 
value for my client. It really is that simple.


This is not to say Revolution is the perfect application framework for 
every type of project --though I've personally yet to find a project 
which it won't work for. Projects which require large teams of 
programmers (like Operating Systems for instance) are not a good match 
for Runtime Revolution. But for small groups who need fast results, 
Runtime Revolution works great...libraries or not.


And for the record, Richmond was not 'banished' from this list for his 
views on Open Source. The first time, I believe he was banished for his 
choice of cursed language, and RR let him back on only to have him post 
to this list a hack to the RR website (which many of us would have only 
forwarded directly to RR).


Your effort here to cast RR in a poor light regarding Richmond, Xavier 
and others is a disservice to those who don't know the whole story.


-Chipp

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-17 Thread Mark Wieder
Marielle-

Friday, March 17, 2006, 4:44:16 AM, you wrote:

 2) Rich and easy to access documentation

 If you want to use a java library written by somebody else, simple,
 you get access to the API online and you know what method to call and
 how. You don't need to know *anything* about the inner workings of  
 the library. Why is it? Because some some conventions have been  
 created which let you comment your script in a very efficient way,  
 where the API doc can be automatically generated from these comments.
 http://java.sun.com/j2se/javadoc/. There is *NOTHING* even close to
 this in revolution. Here, if you want to find your way through

...sure there is. You have to roll your own, but it's not that much
transcript code. My libraries generate their own documentation through
a javadoc-like mechanism. Check out, for example, my ArchiveSearch
plugin on revonline and open the libDispatcher library. Click on the
API button.

And the ECMI document was developed as a way to provide library
developers with a standardized way of documenting the api, among other
things. If library developers don't follow this then it's no different
from java developers not supplying javadoc comments or providing api
documentation online. They're just conventions that have become fairly
universally adopted. Not knowing *anything* about the internal
workings of a library can cause much more pain in java than in rev,
especially in areas of throwing exceptions and threading.

-- 
-Mark Wieder
 [EMAIL PROTECTED]

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-17 Thread Dave Cragg


On 17 Mar 2006, at 18:26, Mark Wieder wrote:


Marielle-

Friday, March 17, 2006, 4:44:16 AM, you wrote:


many Japanese management concepts such as Total Quality Control,
Quality Control circles, small group activities, labor relations. Key
elements of Kaizen are quality, effort, involvement of all employees,
willingness to change, and communication.


Having been involved with Total Quality initiatives, Quality Control
Circles, etc, on this side of the pond I can say from experience that
they are doomed to failure because of underlying cultural differences.
Labor and social relationships are not structured in western societies
to provide the level of trust and support required to allow them to be
effective.



Like Lynn, I've spent a long time in Japan, and my life still carries  
the trappings.


I agree with what you say, Mark, but I think it isn't the whole  
picture. In the early 80s, a guy at a Japanese steel company  
explained to me how his time was being taken up with visiting  
Americans determined to learn the secrets of Japanese TQC.  He felt  
they were wasting their time. Not because they were incapable of  
learning, but because there was nothing to learn. He said that  
Westerners will debate and evaluate various methods until they decide  
on the best approach. Japanese corporations, on the other hand, will  
take any method, good or bad, and make it work. Having subsequently  
worked with a number of large Japanese corporations, I think his  
comments were very shrewd. In other words, it's not that Japanese  
methods transferred to the west are doomed to failure, but rather  
that any method adopted by Japanese corporations is doomed to  
success. (But that was in the 80s, and plenty has changed since then.)


Cheers
Dave
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


RE: Making the move...

2006-03-17 Thread Lynn Fredricks
Hi all,

I must have missed the fuse on this thread, sorry - I only caught it from
Mark's response to Kaizen - sorry, Marielle, I accidentally deleted your
list of concerns but have now a copy to review. Some of it Id like to
discuss off list.

Lets step away from the impending flames of non-product issues. Until Jacque
finishes her time travel stack, there isnt much that can be done with
history :-) 

2006 will be a good year for Runtime as a company and Revolution as a
product platform. There is a limit to the amount of detail I can go into in
a public venue. There are some things we can discuss in more detail at
RevCon West. I hope to all see you there. In the spirit of the season,
please allow the baby bird to hatch out :-)

Best regards,


Lynn Fredricks
Worldwide Business Operations
Runtime Revolution, Ltd


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


RE: Making the move...

2006-03-17 Thread Lynn Fredricks
 I agree with what you say, Mark, but I think it isn't the 
 whole picture. In the early 80s, a guy at a Japanese steel 
 company explained to me how his time was being taken up with 
 visiting Americans determined to learn the secrets of 
 Japanese TQC.  He felt they were wasting their time. Not 
 because they were incapable of learning, but because there 
 was nothing to learn. He said that Westerners will debate and 
 evaluate various methods until they decide on the best 
 approach. Japanese corporations, on the other hand, will take 
 any method, good or bad, and make it work. Having 
 subsequently worked with a number of large Japanese 
 corporations, I think his comments were very shrewd. In other 
 words, it's not that Japanese methods transferred to the west 
 are doomed to failure, but rather that any method adopted by 
 Japanese corporations is doomed to success. (But that was in 
 the 80s, and plenty has changed since then.)

That's true - I don't think the mentality has changed since that time,
though economic shifts did have its social impact. Failure really isn't an
option - they make it work. But it is possible to use Japanese methods and
have strong, cohesive, quality minded teams, even with a few Americans
walking on the tatami mats with muddy shoes ;-) It is just extremely hard to
achieve.

Best regards,


Lynn Fredricks
Worldwide Business Operations
Runtime Revolution, Ltd


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-17 Thread J. Landman Gay

Lynn Fredricks wrote:


 Until Jacque
finishes her time travel stack, there isnt much that can be done with
history :-) 


2006 will be a good year for Runtime as a company and Revolution as a
product platform. 


Playing with the beta again, are  you? ;)

--
Jacqueline Landman Gay | [EMAIL PROTECTED]
HyperActive Software   | http://www.hyperactivesw.com
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-17 Thread Chipp Walters

Interesting topic.

I've probably logged over 30 trips to Japan since 1986. I once had the 
good fortune to meet with a Dr. Sasaki, the father of computer science 
in Japan for lunch. He was an original member of the ENIAC team here in 
the US.


I mentioned to him that many years before, Japan had a reputation for 
cheap products, then they proved it wrong by creating high-quality 
products. I then mentioned the fact people said Japan couldn't create 
steel, to which they ended up virtually owning the steel industry. I 
furthered on with topics on consumer electronics, computers parts, 
computers, cars, etc..each time with Japan ultimately proving to the 
world their mastery of such industries.


Finally, I said, the current knock on Japan was they couldn't develop 
software, and would they again prove the naysayer wrong? To my 
astonishment, he answered 'NO', the naysayers were correct. Japan would 
never be a great software development country. I asked him this 10 years 
ago, and didn't believe his answer.


He gave 3 reasons for this:

1) The culture. Great software is typically created by a small group of 
only a few developers-- not the Japanese way of throwing manpower at a 
problem. Furthurmore, typcially good developers are not very social and 
can be obstinate (duh!), which again flys against the culture. And, the 
program all night when on a roll, then sleep all day type would never 
fly in a Japanese corporation.


2) It is very difficult for startup companies to begin in Japan. There 
are huge incorporation fees, plus it's almost impossible to go public, 
so it's difficult to find investors, Because the 'equity' of a software 
startup is not 'tangible', it's very difficult to get banks to become 
involved, and a good banking relationship is very important to startups.


3) Lastly, the best computer languages were based in English, and very 
different from the way Japanese read and write.


I imagine much of this has changed in the past 10 years or so since we 
last talked, but I still believe many of his concerns have some 
validity. Of course, as recently as a couple of years ago, I toured a 
new CG Manga studio where people slept on the floor under the desks in 
makeshift tent-beds and generally had a more 'western' feel like many 
game studios do today.


Of course, as they say, the proof is in the pudding. And, we've yet to 
see any big mainstream programs come out of Japan. But, there are some. 
I believe Shade 3D is a Japanese program (Lynn, you may know about this?).


-Chipp

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-17 Thread Richard K. Herz

 I had the pleasure of serving tiramisu

A gracious host, Richard G. is! Thanks for your full meal of a post as 
well as your deserts.


Rich
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Mark Wieder
Marielle-

Wednesday, March 15, 2006, 5:22:34 PM, you wrote:

 Simple: A method for outputting Java byte-codes equivalent to
 MetaCard scripts has been designed, but implementation has been  
 delayed until the serious performance, compatibility, and  
 functionality limitations in Java have been rectified.
 http://www.metacard.com/pi5.html

Thanks indeed for the links. That one, however, seems to be circa-2003
vaporware.

-- 
-Mark Wieder
 [EMAIL PROTECTED]

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Klaus Major

Hi Mark,


Marielle-

Wednesday, March 15, 2006, 5:22:34 PM, you wrote:


Simple: A method for outputting Java byte-codes equivalent to
MetaCard scripts has been designed, but implementation has been
delayed until the serious performance, compatibility, and
functionality limitations in Java have been rectified.
http://www.metacard.com/pi5.html


Thanks indeed for the links. That one, however, seems to be circa-2003
vaporware.


well, Dr. Rainey is not known for airy statements, actually ;-)


--
-Mark Wieder
 [EMAIL PROTECTED]


Regards

Klaus Major
[EMAIL PROTECTED]
http://www.major-k.de

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Richard Gaskin

Dan Shafer wrote:

With the caveat that I am hardly a Rails expert and certainly have not done
a lot of work with Rev on the server side either, let me see if I can
clarify my earlier point here. I know that what I'm going to say is probably
so trivial to many reading this thread that it will seem like I'm just off
base, but I'm trying to make the issue I see really starkly clear.


I'm certainly no Ruby/Rails expert either, but I am among those
attracted to the word impossible. :)  Even though we've moved past
that original point, there may be some interesting things to explore here.

This one got a bit long (from me?  Gosh, when did I ever write a long 
post? g), so I added section headers to try to make it an easier read:



PARSING/ASSEMBLING THE CLIENT OUTPUT



With PHP or Ruby on Rails, a Web *app* consists of a collection of 1 or more
templates -- HTML files with embedded command and function calls -- that
execute in a server-side scripting language interpreter running on the
server. All Web pages with this embedded script code are run through the
scripting language interpreter on the server, where the command is carried
out and some content is generated to replace the command call before the
page is sent to the HTTP server to return to the client.

So for example (and I realize this is so simplistic that it may not be
sufficiently illustrative), in a .rhtml (rubified HTML) file, you might find
this construct:

It is now %= Time.now %


In Transcript:

  It is now [[the time]]

You run that through the merge function:

  put merge(It is now [[the time]])

...and you get:

  It is now 4:44 PM

More interesting is that you don't need to use literal expressions with
merge; you can pass it variables as well, with any number of bracketed 
statements, allowing you to make whole pages of snippets which have all 
the smarts of Transcript embedded throughout, processed in a single 
merge() call.


And of course we all know about the other powerful text manipulation
stuff in Transcript like chunk expressions and such, so we can move on
to the bigger question of how we hook the engine into the web
transaction process.


HOOKING REV INTO THE SERVER TRANSACTION
---

Most of the RoR documentation makes reference to FastCGI as the
deployment mechanism for Ruby, and recommends using a specialized server 
app, WEBrick, for testing locally before deployment.  It seems Rev has 
both of these covered.


If I read Pierre's article at 
http://istream.homeunix.com/insead/index_en.html correctly, it seems 
we can use Rev as a daemon (at least on Linux), providing a 
stay-resident option just as one would do with other engines like Perl, 
Python, etc.


I would imagine one could also set up Apache to use Rev for server-side 
includes, using settings similar to what's used for Ruby or PHP.


Because the interest in using Ruby on web servers is relatively recent,
I can't imagine there's anything in the server configuration that
couldn't also be done with Rev (or Python or PHP other popular engines).
In both cases you need to install the engine and set up the server so it
knows what to do with it.

There may be some reason that Rev can't be used with FastCGI per se, but 
given that it will run as a daemon on Linux offhand I don't know what 
that could be.  If anyone here knows it would be interesting to find 
out, and even more interesting to find out if you've been able to use 
Rev with FastCGI successfully.




PROS AND CONS OF REV AND RUBY
-

Beyond the configuration, there are two main differences between a Rev
and a Ruby solution:  OOP and Rails.

The first is the age-old procedural vs. OOP argument.  There are
benefits both ways, and I dare not suggest we need to answer that big
abstract question here. :)

Where Ruby really shines is in Rails:  there's a lot of code there,
well-crafted code.  You'd have to write that yourself to get to the same
level of development productivity with Rev.

But consider this about the origins of Ruby:

Matz's primary design consideration is to make programmers
happy by reducing the menial work they must do, following
the principles of good user interface design. He stresses
that systems design needs to emphasize human, rather than
computer, needs.
http://en.wikipedia.org/wiki/Ruby_programming_language

Sound like another language we know?  :)

Personally, I think the only reasons we're reading about Ruby on Rails
rather than Revolution on Rails are that both Ruby and Rails are open 
source, and there is no similar framework for Rev. While Rev isn't 
inherently OOP as Ruby is, it has its own favorable tradeoffs which make 
it quite attractive in its own right.




FRAMEWORKS AND DEPLOYMENT OPTIONS
-

So what if someone took that much time to craft a web app framework in
Transcript?


I'm reminded of Andre's presentation at the first 

Re: Making the move...

2006-03-16 Thread Collabyrinth VPN
Forgive the intrusion from a 'lurker', but as I've learned so much from 
you all the last three months, it's time I gave something back.


I'm developing using Ruby on Rails on both Windows XP Pro SP2  
(Knoppix) Linux simultaneously.


Rev works just fine with FastCGI. Fwiw, I'd be happy to set up some 
benchmarks and publish the results next week, if it helps.


A brief general comment. I use and modify the Ruby code to handle the 
'unseen' parts, if you will, and Rev to generate what the user sees on 
the websites. I see Rev as complementary to ROR, and it seems to work 
well. A good mix.


Cheers from Canada
Peter Elliott

Richard Gaskin wrote:


Dan Shafer wrote:

With the caveat that I am hardly a Rails expert and certainly have 
not done

a lot of work with Rev on the server side either, let me see if I can
clarify my earlier point here. I know that what I'm going to say is 
probably
so trivial to many reading this thread that it will seem like I'm 
just off

base, but I'm trying to make the issue I see really starkly clear.



I'm certainly no Ruby/Rails expert either, but I am among those
attracted to the word impossible. :)  Even though we've moved past
that original point, there may be some interesting things to explore 
here.


This one got a bit long (from me?  Gosh, when did I ever write a long 
post? g), so I added section headers to try to make it an easier read:



PARSING/ASSEMBLING THE CLIENT OUTPUT


With PHP or Ruby on Rails, a Web *app* consists of a collection of 1 
or more

templates -- HTML files with embedded command and function calls -- that
execute in a server-side scripting language interpreter running on the
server. All Web pages with this embedded script code are run through the
scripting language interpreter on the server, where the command is 
carried

out and some content is generated to replace the command call before the
page is sent to the HTTP server to return to the client.

So for example (and I realize this is so simplistic that it may not be
sufficiently illustrative), in a .rhtml (rubified HTML) file, you 
might find

this construct:

It is now %= Time.now %



In Transcript:

  It is now [[the time]]

You run that through the merge function:

  put merge(It is now [[the time]])

...and you get:

  It is now 4:44 PM

More interesting is that you don't need to use literal expressions with
merge; you can pass it variables as well, with any number of bracketed 
statements, allowing you to make whole pages of snippets which have 
all the smarts of Transcript embedded throughout, processed in a 
single merge() call.


And of course we all know about the other powerful text manipulation
stuff in Transcript like chunk expressions and such, so we can move on
to the bigger question of how we hook the engine into the web
transaction process.


HOOKING REV INTO THE SERVER TRANSACTION
---

Most of the RoR documentation makes reference to FastCGI as the
deployment mechanism for Ruby, and recommends using a specialized 
server app, WEBrick, for testing locally before deployment.  It seems 
Rev has both of these covered.


If I read Pierre's article at 
http://istream.homeunix.com/insead/index_en.html correctly, it seems 
we can use Rev as a daemon (at least on Linux), providing a 
stay-resident option just as one would do with other engines like 
Perl, Python, etc.


I would imagine one could also set up Apache to use Rev for 
server-side includes, using settings similar to what's used for Ruby 
or PHP.


Because the interest in using Ruby on web servers is relatively recent,
I can't imagine there's anything in the server configuration that
couldn't also be done with Rev (or Python or PHP other popular engines).
In both cases you need to install the engine and set up the server so it
knows what to do with it.

There may be some reason that Rev can't be used with FastCGI per se, 
but given that it will run as a daemon on Linux offhand I don't know 
what that could be.  If anyone here knows it would be interesting to 
find out, and even more interesting to find out if you've been able to 
use Rev with FastCGI successfully.




PROS AND CONS OF REV AND RUBY
-

Beyond the configuration, there are two main differences between a Rev
and a Ruby solution:  OOP and Rails.

The first is the age-old procedural vs. OOP argument.  There are
benefits both ways, and I dare not suggest we need to answer that big
abstract question here. :)

Where Ruby really shines is in Rails:  there's a lot of code there,
well-crafted code.  You'd have to write that yourself to get to the same
level of development productivity with Rev.

But consider this about the origins of Ruby:

Matz's primary design consideration is to make programmers
happy by reducing the menial work they must do, following
the principles of good user interface design. He stresses
that systems design needs to emphasize 

Re: Making the move...

2006-03-16 Thread Richard Gaskin

Peter Elliott wrote:


Rev works just fine with FastCGI. Fwiw, I'd be happy to set up
some  benchmarks and publish the results next week, if it helps.


That would be enormously helpful.  Thank you!

If you come to RevCon West in June or Euro RevCon in November I'll buy 
the beverage of your choice at one of the get-togethers.  It's the least 
I could do for such helpful information as the benchmarks.


--
 Richard Gaskin
 Managing Editor, revJournal
 ___
 Rev tips, tutorials and more: http://www.revJournal.com
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Collabyrinth VPN

Richard

Thank you for the kind invitation! Given that I'm writing these server 
programs in aid of a certain well-known 12 Step program's online 
activities, and that it's doubtful I'll be at either event, more's the 
pity, please be advised you can Fed-Ex any kind of high-test 
caffiene-laden product (Saigon Dark beans, por ejemplo ...) to my 
office, anytime.


All kidding aside, and now that I've de-lurked, of all the mailing lists 
and digest I receive, I find this one of the most fertile  stimulating. 
I thank you all for that.


I think I can safely commit to delivering benchmarks by Wednesday of 
next week and will be happy to do so.


Peter Elliott

Richard Gaskin wrote:


Peter Elliott wrote:


Rev works just fine with FastCGI. Fwiw, I'd be happy to set up
some  benchmarks and publish the results next week, if it helps.



That would be enormously helpful.  Thank you!

If you come to RevCon West in June or Euro RevCon in November I'll buy 
the beverage of your choice at one of the get-togethers.  It's the 
least I could do for such helpful information as the benchmarks.


--
 Richard Gaskin
 Managing Editor, revJournal
 ___
 Rev tips, tutorials and more: http://www.revJournal.com
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your 
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Wally Rodriguez
How about a tutorial on how to set up Rev to use FastCGI. For those  
of us for whom a lot of these terms are totatlly new, it would be  
great to be able to take advantage of some of these tools.


I know I'm already salivating at the possibilities of merge(),  
something I just learned about on this thread.


W.

On Mar 16, 2006, at 1:34 PM, Collabyrinth VPN wrote:

Forgive the intrusion from a 'lurker', but as I've learned so much  
from you all the last three months, it's time I gave something back.


I'm developing using Ruby on Rails on both Windows XP Pro SP2   
(Knoppix) Linux simultaneously.


Rev works just fine with FastCGI. Fwiw, I'd be happy to set up some  
benchmarks and publish the results next week, if it helps.


A brief general comment. I use and modify the Ruby code to handle  
the 'unseen' parts, if you will, and Rev to generate what the user  
sees on the websites. I see Rev as complementary to ROR, and it  
seems to work well. A good mix.


Cheers from Canada
Peter Elliott


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Jim Ault
On 3/16/06 10:13 AM, Richard Gaskin [EMAIL PROTECTED] wrote:

 I would 
 enourage those interested in web apps grab Dr. Raney's mchttpd.mc and
 play with it a while.   It's a thing of beauty to just open the stack,
 click the Start button, and call it with your browser.
Hi, Richard,

I am beginning to step toward the world of web apps and  did the dnld of the
mchttpd app, started it on a G5, but am not sure how to access it.

Tried in Safari 
(on the same OSX 10.4.2 computer)
( IE on Win32 behind the same router)

 http://192.186.15.100
 http://192.186.15.100/index.html

= can't find the server

Does the mchttpd computer have to have static IP?

Although I am new at this, I know someone who might jump into Rev if he saw
this working.

Thanks.

Jim Ault
Las Vegas


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Collabyrinth VPN

Wally

As (your) luck would have it, we're working on exactly such a document 
for the poor unfortunates who will inherit the servers once I've wrought 
havoc on them.


This is pro bono stuff for the fellowship AFAIC, for keeping me sober 
since 1979, so by all means, when it's done and relatively stable, I'll 
release it in the RunRev wild.


Some of the stuff around FastCGI is a bit tricky, but I think the 
documentation will pull you through. If it doesn't, you know where to 
get me.


So, about the coffee ...

Peter Elliott

Wally Rodriguez wrote:

How about a tutorial on how to set up Rev to use FastCGI. For those  
of us for whom a lot of these terms are totatlly new, it would be  
great to be able to take advantage of some of these tools.


I know I'm already salivating at the possibilities of merge(),  
something I just learned about on this thread.


W.

On Mar 16, 2006, at 1:34 PM, Collabyrinth VPN wrote:

Forgive the intrusion from a 'lurker', but as I've learned so much  
from you all the last three months, it's time I gave something back.


I'm developing using Ruby on Rails on both Windows XP Pro SP2   
(Knoppix) Linux simultaneously.


Rev works just fine with FastCGI. Fwiw, I'd be happy to set up some  
benchmarks and publish the results next week, if it helps.


A brief general comment. I use and modify the Ruby code to handle  
the 'unseen' parts, if you will, and Rev to generate what the user  
sees on the websites. I see Rev as complementary to ROR, and it  
seems to work well. A good mix.


Cheers from Canada
Peter Elliott



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your 
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread [EMAIL PROTECTED]
Wow Peter, great!  As one of the lurkers who has been toying with  
Revolution before taking a dive, this is indeed inspiring.


Thanks,

Michael


On Mar 16, 2006, at 7:44 PM, Collabyrinth VPN wrote:


Wally

As (your) luck would have it, we're working on exactly such a  
document for the poor unfortunates who will inherit the servers  
once I've wrought havoc on them.


This is pro bono stuff for the fellowship AFAIC, for keeping me  
sober since 1979, so by all means, when it's done and relatively  
stable, I'll release it in the RunRev wild.


Some of the stuff around FastCGI is a bit tricky, but I think the  
documentation will pull you through. If it doesn't, you know where  
to get me.


So, about the coffee ...

Peter Elliott

Wally Rodriguez wrote:

How about a tutorial on how to set up Rev to use FastCGI. For  
those  of us for whom a lot of these terms are totatlly new, it  
would be  great to be able to take advantage of some of these tools.


I know I'm already salivating at the possibilities of merge(),   
something I just learned about on this thread.


W.

On Mar 16, 2006, at 1:34 PM, Collabyrinth VPN wrote:

Forgive the intrusion from a 'lurker', but as I've learned so  
much  from you all the last three months, it's time I gave  
something back.


I'm developing using Ruby on Rails on both Windows XP Pro SP2
(Knoppix) Linux simultaneously.


Rev works just fine with FastCGI. Fwiw, I'd be happy to set up  
some  benchmarks and publish the results next week, if it helps.


A brief general comment. I use and modify the Ruby code to  
handle  the 'unseen' parts, if you will, and Rev to generate what  
the user  sees on the websites. I see Rev as complementary to  
ROR, and it  seems to work well. A good mix.


Cheers from Canada
Peter Elliott



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your  
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your  
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Thomas McGrath III

Peter,

As a fellow 'coffee' drinker, welcome to the list.

We keep what we have by giving it away. works real well in this  
environment too.



Easy Does It,

Tom


On Mar 16, 2006, at 7:44 PM, Collabyrinth VPN wrote:
This is pro bono stuff for the fellowship AFAIC, for keeping me  
sober since 1979, so by all means, when it's done and relatively  
stable, I'll release it in the RunRev wild.


So, about the coffee ...

Peter Elliott


Thomas J McGrath III
[EMAIL PROTECTED]

Lazy River Software™ - http://www.lazyriversoftware.com

Lazy River Metal Art™ - http://www.lazyriversoftware.com/metal.html

Meeting Wear™ - http://www.cafepress.com/meetingwear

Semantic Compaction Systems - http://www.minspeak.com

SCIconics, LLC - http://www.sciconics.com/sciindex.html







___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Richard Gaskin

Jim Ault wrote:
 On 3/16/06 10:13 AM, Richard Gaskin wrote:
 I would enourage those interested in web apps grab
 Dr. Raney's mchttpd.mc and play with it a while.
 It's a thing of beauty to just open the stack,
 click the Start button, and call it with your
 browser.

 I am beginning to step toward the world of web apps
 and  did the dnld of the mchttpd app, started it on
 a G5, but am not sure how to access it.

 Tried in Safari
 (on the same OSX 10.4.2 computer)
 ( IE on Win32 behind the same router)

  http://192.186.15.100
  http://192.186.15.100/index.html

 = can't find the server

 Does the mchttpd computer have to have static IP?

 Although I am new at this, I know someone who might jump
 into Rev if he saw this working.

The default port in mchttpd is 8080 -- on my Mac I use:

http://localhost:8080/


--
 Richard Gaskin
 Managing Editor, revJournal
 ___
 Rev tips, tutorials and more: http://www.revJournal.com

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Collabyrinth VPN

Michael

Well, I was looking for solution to fasttrack an entirely different 
project when I ran across Revolution. I've been running it on a 
Groundhog Day WinBox, but it's dive-time for me, most certainly. This 
list is also a very fertile group, I think, and that's helped immensely.


Sometimes I think we programmers take far too much pride in the 
*complexity* of what we do, and shun truly productive environments 
because anyone can do it kind of thinking. (You're reading this from a 
guy who writes Pike/Ruby/PHP/C/SB code in a freeware editor just to be 
macho man because I'm surrounded by people 2/5ths my age. Job security.)


This is a useful, powerful product, and the way it gets more exposure is 
if we turn out high-quality, attractive and powerful websites  apps to 
prove it.


With apologies to VB lovers anywhere, this ain't exactly Visual Basic.

Regards,
Peter

[EMAIL PROTECTED] wrote:

Wow Peter, great!  As one of the lurkers who has been toying with  
Revolution before taking a dive, this is indeed inspiring.


Thanks,

Michael


On Mar 16, 2006, at 7:44 PM, Collabyrinth VPN wrote:


Wally

As (your) luck would have it, we're working on exactly such a  
document for the poor unfortunates who will inherit the servers  once 
I've wrought havoc on them.


This is pro bono stuff for the fellowship AFAIC, for keeping me  
sober since 1979, so by all means, when it's done and relatively  
stable, I'll release it in the RunRev wild.


Some of the stuff around FastCGI is a bit tricky, but I think the  
documentation will pull you through. If it doesn't, you know where  
to get me.


So, about the coffee ...

Peter Elliott

Wally Rodriguez wrote:

How about a tutorial on how to set up Rev to use FastCGI. For  
those  of us for whom a lot of these terms are totatlly new, it  
would be  great to be able to take advantage of some of these tools.


I know I'm already salivating at the possibilities of merge(),   
something I just learned about on this thread.


W.

On Mar 16, 2006, at 1:34 PM, Collabyrinth VPN wrote:

Forgive the intrusion from a 'lurker', but as I've learned so  
much  from you all the last three months, it's time I gave  
something back.


I'm developing using Ruby on Rails on both Windows XP Pro SP2
(Knoppix) Linux simultaneously.


Rev works just fine with FastCGI. Fwiw, I'd be happy to set up  
some  benchmarks and publish the results next week, if it helps.


A brief general comment. I use and modify the Ruby code to  handle  
the 'unseen' parts, if you will, and Rev to generate what  the 
user  sees on the websites. I see Rev as complementary to  ROR, and 
it  seems to work well. A good mix.


Cheers from Canada
Peter Elliott




___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your  
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your  
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your 
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution



___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Jim Ault



On 3/16/06 6:54 PM, Richard Gaskin [EMAIL PROTECTED] wrote:
 The default port in mchttpd is 8080 -- on my Mac I use:
 
  http://localhost:8080/

Woiks very good... cool.


Is there a tutorial about how to put this in action on my G4 that has a
static IP?  I know that Apache would be the default receiver of 8080 traffic
and I am definitely not a config-mechanic.

Jim Ault
Las Vegas



 Jim Ault wrote:
 On 3/16/06 10:13 AM, Richard Gaskin wrote:
 I would enourage those interested in web apps grab
 Dr. Raney's mchttpd.mc and play with it a while.
 It's a thing of beauty to just open the stack,
 click the Start button, and call it with your
 browser.
 
 I am beginning to step toward the world of web apps
 and  did the dnld of the mchttpd app, started it on
 a G5, but am not sure how to access it.
 
 Tried in Safari
 (on the same OSX 10.4.2 computer)
 ( IE on Win32 behind the same router)
 
  http://192.186.15.100
  http://192.186.15.100/index.html
 
 = can't find the server
 
 Does the mchttpd computer have to have static IP?
 
 Although I am new at this, I know someone who might jump
 into Rev if he saw this working.


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-16 Thread Dan Shafer
Well, at least from the mc stack, you just run it and it seems to intercept
the call on the designated port. You can manually change the port in the
launch stack as well.

PRetty cool stuff.


On 3/16/06, Jim Ault [EMAIL PROTECTED] wrote:




 On 3/16/06 6:54 PM, Richard Gaskin [EMAIL PROTECTED] wrote:
  The default port in mchttpd is 8080 -- on my Mac I use:
 
   http://localhost:8080/

 Woiks very good... cool.


 Is there a tutorial about how to put this in action on my G4 that has a
 static IP?  I know that Apache would be the default receiver of 8080
 traffic
 and I am definitely not a config-mechanic.


--
~~
Dan Shafer, Information Product Consultant and Author
http://www.shafermedia.com
Get my book, Revolution: Software at the Speed of Thought
From http://www.shafermediastore.com/tech_main.html
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-15 Thread Dan Shafer
Richard.

I *certainly* don't disagree with your response, but I'm earnestly seeking a
description of how you'd go about building an app in Rev that is entirely
deliverable via a Web browser, which is, I submit, the definition of a Web
application. I think that was the original point/question. Creating
thin-client Web appliances is amazingly easy with Rev. Creating CGIs that
run on a server -- including back-end database access -- is also feasible,
if somewhat limited in terms of performance (no FCGI support as far as I
know).

If this is possible, I'd sure like to know how to do it.

On 3/14/06, Richard Gaskin [EMAIL PROTECTED] wrote:

But if the goal is to deliver the benefits of productive, flexible
systems, Transcript can prove quite capable in ways that may surprise.



--
~~
Dan Shafer, Information Product Consultant and Author
http://www.shafermedia.com
Get my book, Revolution: Software at the Speed of Thought
From http://www.shafermediastore.com/tech_main.html
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-15 Thread Richard Gaskin

Dan Shafer wrote:

 On 3/14/06, Richard Gaskin [EMAIL PROTECTED] wrote:

 But if the goal is to deliver the benefits of productive,
 flexible systems, Transcript can prove quite capable in
 ways that may surprise.

 Richard.

 I *certainly* don't disagree with your response, but I'm earnestly
 seeking a description of how you'd go about building an app in Rev
 that is entirely deliverable via a Web browser, which is, I submit,
 the definition of a Web application. I think that was the original
 point/question. Creating thin-client Web appliances is amazingly
 easy with Rev. Creating CGIs that run on a server -- including
 back-end database access -- is also feasible, if somewhat limited
 in terms of performance (no FCGI support as far as I know).

 If this is possible, I'd sure like to know how to do it.

A web application has at least a web-based interface, and often also 
has a server-side component to it.


There are three viable methods of making an interactive interface in a 
web browser:


a) Java
b) Flash
c) DHTL (recently re-christened Ajax)

Rev doesn't produce Java or Flash output, so if those are desired you 
would indeed have to go to another tool.


But neither does Ruby.

Nor is Ruby embedded in web browsers.

Web browsers have only one universal language at this time:  JavaScript, 
which is the heart of DHTML/Ajax.


JavaScript is plain uncompiled ASCII text.  It can be 
generated/assembled/sliced/diced by a Rev-based CGI just as assuredly as 
any other language, such as Ruby, can do so.


Rev's merge function is enormously powerful, as are its chunk 
expressions and file handling.  Smartly-designed snippets of JavaScript 
and HTML can be combined and recombined quickly and easily with Transcript.


As for performance, most CGIs are loaded when called.  The exception is 
FastCGI, employing a stay-resident option to minimize load times.  Many 
ISPs preconfigure their Perl installations to use FastCGI, and FastCGI 
is the recommended interface when you install and set up Ruby.  It may 
be possible to use FastCGI with Rev; I'll leave it to the server experts 
here to fill us in on that.


When run as a CGI, the Rev engine loads _much_ faster than it does on 
the desktop, which is pretty darn fast as it is.  As a CGI it doesn't 
need to initialize any of its GUI elements, so the load time on a decent 
server should be roughly on par with any other engine of equivalent size.


It would be helpful is someone here has performance benchmarks on Rev as 
a CGI relative to Perl, Python, Ruby, and other server-side languages.


If FastCGI cannot be used with the Rev engine, then indeed we can expect 
a performance disparity between the Rev engine and the Ruby engine.  But 
impossible?  I don't see how.


One of the main bullet points for developing in RoR is the MVC 
implementation, but again that's not exactly new.  Smalltalk had MVC, 
and there are implementations in most OOPs and many non-OOPs as well, 
including a few done in Rev to varying degrees.  While the Rev ones have 
focused on native controls for triggers, one would have to write 
JavaScript triggers for web-based UIs, as they would with any 
browser-based implementation.


Ruby is a fine language, and the on Rails framework is well thought 
out and very useful.  But it's not magic; Ruby is just a language, its 
Rails just a framework, and I've seen nothing in it that couldn't also 
be done with Perl, Python, Rev, or any other CGI.  There may be 
tradeoffs with runtime performance and development productivity, but I 
see nothing which would discount all web applications as impossible to 
do in Rev.



And as you note, Rev does one thing Ruby can't:  compliment the range of 
deliverables with a net-savvy desktop app (think maps.google vs Google 
Earth).  While only useful in a subset of scenarios, it offers many 
benefits, esp. for intranets where employers are losing billions in lost 
productivity by providing open web access to their employees when all 
they really need is access to specific company- and vendor-specific 
resources.  Rev-based net-savvy apps (or net apps, or net 
appliances, or thick clients, or whatever else one might call them) 
are like VPNs for the rest of us.  And, as with Google Earth, there are 
UI benefits to such desktop implementations as well.



All that said, there are two benefits to Ruby:  most of the code you'd 
need is already written, and as open source it's all freely available.


But while Ruby may have some advantages, that doesn't make using other 
languages to generate DHTML interfaces impossible.



Taking this a step further, I'll close with an exercise for the reader:

1. Make a web app development tool in Rev for laying out and generating 
DHTML controls for web pages.


2. Now make the same tool in Ruby.

 ;)

--
 Richard Gaskin
 Managing Editor, revJournal
 ___
 Rev tips, tutorials and more: http://www.revJournal.com

Re: Making the move...

2006-03-15 Thread Pierre Sahores
And as long as MCRev web applications servers have been my best  
incomes sources betwin 1997 and 200x, i just can add that Rev is,  
before J2SE or PHP and behind Ruby on Rails, a real firstclass web  
apps development platform. RoR is probably before Rev in about the  
apps deployment framework and Rev is probably lots before RoR about  
the development langage it self, at least in my humble mind because  
the transcript xtalk structure, because the rev engine, both more  
polished and able to let us design our web apps in less time than in  
building them in Ruby coding.


A public accessible example app : http://www2.sahores-conseil.com/ 
citalis.xml


Some design, downloadable material and guildelines : http:// 
istream.homeunix.com/insead/index_en.html


:)

Le 15 mars 06 à 05:46, Richard Gaskin a écrit :


Dan Shafer wrote:
Web applications in the sense Ruby on Rails defines them cannot be  
written

in Revolution.


Since that definition requires the Ruby language and that it be on
rails, nothing can satisfy it except Ruby on Rails.

:)

But DHTML (or AJAX* as the kids now call it) is just ASCII, and
Transcript is unusually adept at parsing, concatenating, and merging
text.  And behind the presentation layer a database is a database, and
interfacing it is always only as graceful as the self-discipline of  
the

developer, regardless of the language.  Frameworks are not a new
invention, and certainly not unique to RoR.

If the goal is to meet someone else's very specific definition of a
development paradigm, sure, Transcript may not be able to do  
exactly that.


But if the goal is to deliver the benefits of productive, flexible  
systems, Transcript can prove quite capable in ways that may surprise.


Extra bonus points:  With Rev you have the option of moving beyond  
Web 2.0 as in http://maps.google.com/, and moving right up to Web  
3.0 a la http://earth.google.com/. :)


--
 Richard Gaskin
 Managing Editor, revJournal
 ___
 Rev tips, tutorials and more: http://www.revJournal.com


* I'm so old when I hear Ajax I think of http://en.wikipedia.org/ 
wiki/Operation_ajax.

___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your  
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution



--
Pierre Sahores
www.sahores-conseil.com


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-15 Thread J. Landman Gay

Richard Gaskin wrote:

It would be helpful is someone here has performance benchmarks on Rev as 
a CGI relative to Perl, Python, Ruby, and other server-side languages.


I don't have benchmarks, but Scott Raney once said that the load time of 
the engine when used as a CGI was insignificant.


--
Jacqueline Landman Gay | [EMAIL PROTECTED]
HyperActive Software   | http://www.hyperactivesw.com
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-15 Thread Chipp Walters

Richard Gaskin wrote:

All that said, there are two benefits to Ruby:  most of the code you'd 
need is already written, and as open source it's all freely available.


But while Ruby may have some advantages, that doesn't make using other 
languages to generate DHTML interfaces impossible.



Taking this a step further, I'll close with an exercise for the reader:

1. Make a web app development tool in Rev for laying out and generating 
DHTML controls for web pages.


2. Now make the same tool in Ruby.


An interesting side note to all of this is that RonR really doesn't do 
much with DHTML and javascript...they leave that up to the AJAX 
developers. RonR is primarly server oriented, and only provides basic 
html scaffolding as UI. There are a few groups trying to paste AJAX on 
top of Ruby, but it's not that easy (yet).


Dan has first hand info on how easy/hard it is to deploy apps in RonR. 
I'm pretty sure one could right a framework similar to RonR in Rev using 
Rev CGI's but there's always the cgi performace issue. I think Pierre 
Sahores has figured out a way to use a single instance of RevCGI and the 
multiple port capabilites of PHP, though I don't remember the details.


-Chipp


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-15 Thread Pierre Sahores


Le 15 mars 06 à 23:22, Chipp Walters a écrit :


Richard Gaskin wrote:

All that said, there are two benefits to Ruby:  most of the code  
you'd need is already written, and as open source it's all freely  
available.
But while Ruby may have some advantages, that doesn't make using  
other languages to generate DHTML interfaces impossible.
Taking this a step further, I'll close with an exercise for the  
reader:
1. Make a web app development tool in Rev for laying out and  
generating DHTML controls for web pages.

2. Now make the same tool in Ruby.


An interesting side note to all of this is that RonR really doesn't  
do much with DHTML and javascript...they leave that up to the AJAX  
developers. RonR is primarly server oriented, and only provides  
basic html scaffolding as UI. There are a few groups trying to  
paste AJAX on top of Ruby, but it's not that easy (yet).


Dan has first hand info on how easy/hard it is to deploy apps in  
RonR. I'm pretty sure one could right a framework similar to RonR  
in Rev using Rev CGI's but there's always the cgi performace issue.  
I think Pierre Sahores has figured out a way to use a single  
instance of RevCGI and the multiple port capabilites of PHP, though  
I don't remember the details.


http://istream.homeunix.com/insead/index_en.html

;)


-Chipp


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your  
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution



--
Pierre Sahores
www.sahores-conseil.com


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-15 Thread Jonathan Lynch
Couldn't a person build a Rev app that runs continuously, interpreting
information that comes in a various ports and returning the appropriate html
data as needed?

I mean, Rev can operate as a server. So, as long as you are willing to write
in all html formulating, it should be doable.
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


Re: Making the move...

2006-03-15 Thread Pierre Sahores

http://istream.homeunix.com/insead/index_en.html

;)

Le 15 mars 06 à 23:59, Jonathan Lynch a écrit :


Couldn't a person build a Rev app that runs continuously, interpreting
information that comes in a various ports and returning the  
appropriate html

data as needed?

I mean, Rev can operate as a server. So, as long as you are willing  
to write

in all html formulating, it should be doable.
___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your  
subscription preferences:

http://lists.runrev.com/mailman/listinfo/use-revolution



--
Pierre Sahores
www.sahores-conseil.com


___
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution


  1   2   >