## $Id$

startHtmlPage
startHtmlBody
putHeader 3

web::putx {
    <table border="0" cellpadding="0" cellspacing="0" width="770">
    {headRow 4 "frequently asked questions"}
    <tr valign="top">
    {navbar_supp 1}
    <td width="455">
<a name="toc"></a><a name="generic"><h1>Contents</h1>

<p>
<a href="#generic"><b>1 Generic Questions</b></a><br>
<a href="#whatis">1.1 What is Websh?</a><br>
<a href="#version">1.2 What is the current version?</a><br>
<a href="#price">1.3 What does Websh cost?</a><br>
<a href="#download">1.4 Where can I download Websh?</a><br>
<a href="#why">1.5 Why should I use Websh?</a><br>
<a href="#mailinglist">1.6 Is there a mailing list?</a><br>
</p>
<p>
<a href="#technical"><b>2 Technical Questions</b></a><br>
<a href="#logging">2.1 How do I use the logging facility?</a><br>
<a href="#mod_websh">2.2 How do I setup mod_websh?</a><br>
<a href="#apache">2.3 How do I configure mod_websh for Apache 1 or Apache 2 repectively?</a>
</p>

<a name="generic"></a><a href="#toc"><h1>1 Generic Questions</h1></a>

<a name="whatis"></a><a href="#toc"><h2>1.1 What is Websh?</h2></a>

Websh is a rapid development environment for building powerful and
reliable web applications. It is a standard Tcl extension and is
released as Open Source Software. Websh is versatile and handles
everything from HTML generation to data-base driven one-to-one page
customization. Netcetera has been using it for years in many customer
projects, which typically are E-commerce shops or even electronic banking 
applications.
<p>
In addition, Websh provides mod_websh, an Apache module for the Apache 1.3
and Apache 2 web server.

<a name="version"></a><a href="#toc"><h2>1.2 What is the current version?</h2></a>

Currently, version 3.6 of Websh has been released as Beta (but fully working
version). Check the {pageLink download.html -show "download area"} to get the
latest version.

<a name="price"></a><a href="#toc"><h2>1.3 What does Websh cost?</h2></a>

Nothing. It's free. Websh is released as Open Source.

<a name="download"></a><a href="#toc"><h2>1.4 Where can I download Websh?</h2></a>

The latest release of Websh is available for download in the
<a href="download.html">download area</a> of this site.

<a name="why"></a><a href="#toc"><h2>1.5 Why should I use Websh?</h2></a>

In today's E-commerce environment, flexibility and short
time-to-market are key characteristics for successful
business. E-commerce, in other words, calls for a solid basis on which
applications can be built. For exactly this purpose we have designed
Websh.
<p>
Websh helps you to create high-quality web applications with light
time constraints. It is fast, versatile, scalable, and easy to learn.
With Websh, you have a win-win situation for developers and
customers.

<a name="mailinglist"></a><a href="#toc"><h2>1.6 Is there a mailing list?</h2></a>

Sure. Visit the <a href="subscribe.html">subscribe</a> page on this site to get more information.

<a name="technical"></a><a href="#toc"><h1>2 Technical Questions</h1></a>

<a name="logging"></a><a href="#toc"><h2>2.1 How do I use the logging facility?</h2></a>

Before Websh sends a message to a log destination, the message
needs to pass two filters. That's why you need to specify a level when
you issue a log message. First, Websh decides whether or not to
handle the log message. Then, it scrolls through the list of
registered log destinations and compares the log message level against
the filter of each log destination. The message is sent to the log
destination only if the message passes the second filter.

<br><br>
A log level consists of a tag and a level, separated by a dot.
Possible levels are
<ul>
<li>alert</li>
<li>error</li>
<li>warning</li>
<li>info</li>
<li>debug</li>
</ul>
The tag is free text. Typically, it is the name of the application, 
say &quot;foo&quot;.

<br><br>
Before log messages can reach their destination, you have to
&quot;open up&quot; the log destination, in two steps:
<pre>
web::loglevel add foo.warning-debug
web::logdest add foo.warning-info file foo_warn.log
web::logdest add foo.debug file foo_dbg.log
</pre>

This sequence of commands tells Websh to handle all messages
in the range &quot;warning&quot; to &quot;debug&quot;, if the level string is
&quot;foo&quot;, and to discard any other messages. Messages of level
&quot;debug&quot; are then written to file &quot;foo_dbg.log&quot;, while
the other messages end up in file &quot;foo_warn.log&quot;.

<br><br>
Issuing a message is easy:
<pre>
web::log foo.info &quot;Hello, world !&quot;
</pre>

<p>
A sample logging setup for a script in mod_websh looks like this:

<pre>
web::initializer \{
    web::logdest add user.-debug file -unbuffered /tmp/test.log
    web::logfilter add *.-debug
    web::log info &quot;initializing interp&quot;
\}

web::command default \{
    web::log info &quot;command default call number [web::interpcfg  numreq]&quot;
    web::putx &quot;file /tmp/dummypage.html&quot;
\}

web::finalizer \{
    web::log info &quot;shutting down interp&quot;
\}

web::dispatch
</pre>

This will setup logging when the interpreter is created (during the
first request it handles) and later, this logs can be used during the 
requests. Note that only log levels and log destinations created in the
initializer code are accessible in the finalizer. Configurations created
during a request is discared when the rquest ends.

<a name="mod_websh"></a><a href="#toc"><h2>2.2 How do I setup mod_websh?</h2></a>

If you compile and install mod_websh, a sample setup for mod_websh is 
also installed. Please refer to the README file in your installation directory.


<a name="apache"></a><a href="#toc"><h2>2.3 How do I configure mod_websh for Apache 1 or Apache 2 repectively?</h2></a>

Websh will automatically detect whether the header files of Apache 1 or 
Apache 2 are present and compile accordingly. There is no manual change
needed to compile with a specific version. (However a compiled version will
only run with the Apache version it was compiled with.)
    </td>
  </tr>
  </table>
}

finishPage 3
