Practical Internet Groupware: Table of Contents
-
Foreword
-
Preface
-
Who Should Read This Book
-
Organization of This Book
-
Part I
-
Chapter 1
-
Chapter 2
-
Chapter 3
-
Chapter 4
-
Part II
-
Chapter 5
-
Chapter 6
-
Chapter 7
-
Chapter 8
-
Part III
-
Chapter 9
-
Chapter 10
-
Chapter 11
-
Chapter 12
-
Chapter 13
-
Part IV
-
Chapter 14
-
Chapter 15
-
Chapter 16
-
Part V
-
Appendix A
-
Appendix B
-
Conventions Used in this Book
-
Comments and Questions
-
Acknowledgments
-
I. Using Internet Groupware
-
1. The Conferencing Dimension
-
What Is Internet Groupware?
-
Shared Versus Annotated Data Stores
-
What’s Wrong with Email?
-
Groupware Nirvana and Reality
-
The Conferencing Dimension
-
Why Conferencing Matters
-
Lotus Notes, Web Bulletin Boards, and NNTP Newsgroups
-
2. Public Online Communities
-
Advent of the Promiscuous Newsreader
-
The Dynamics of Site-Specific Public Newsgroups
-
Online Focus Groups in Action
-
Managing Online Discussions
-
Making the Most of Discussions
-
Hybrid Web/NNTP Discussion Systems
-
Public Discussions in Perspective
-
3. Intranet Collaboration with NNTP and HTML
-
Using Local Newsgroups: An Overview
-
Conferencing and Email
-
You May Not Need What I Send You
-
What I Send You Now, You May Not Need Until Later
-
When You Do Need What I Sent, You May Have Forgotten That I Sent It
-
Group Spaces and Interpersonal Spaces Work Differently
-
Groups Need Privacy Too
-
If I Put It There, I’ll Be Able to Find It Later
-
I Don’t Have Time to File Things Properly
-
The Quest for a Read/Write Web Server
-
The HTML-aware Newsreader
-
Aggregating Web Content in Newsgroups
-
Newsgroups as Shared, Annotated Bookmark Files
-
Including Web content in Newsgroups
-
Referring to Newsgroup Messages
-
Following Newsgroup Hyperlinks
-
HTML Authoring Strategies
-
Using Images
-
Using images by reference
-
Using images by attachment
-
Using images by inclusion
-
Using Hyperlinks
-
Composing hyperlinks
-
Relabel links when appropriate
-
Don’t obsess about broken links
-
Reaching your Audience
-
The Lowest Common Denominator Is Pretty Good
-
Pick a Standard Browser
-
Use a Test Newsgroup for Experimentation
-
Specify the Audience
-
4. Information-Management Strategies for Groupware Users
-
Understanding and Using Scoped Zones of Discussion
-
Giving in Order to Receive
-
Inviting People into Discussions
-
URL-based invitations to newsgroups
-
Inviting people into web forums
-
Collaboration and Competition
-
Effective Packaging of Messages and Threads
-
Write Effective Titles
-
Compartmentalize Messages
-
Using Thread Hierarchy to Clarify Discussion
-
Use Lightweight Threads to Move from Discussion to Consensus
-
Use Thread Hierarchy to Organize Documentation
-
Using Messages to Conduct Polls
-
Method 1: Message-Based Polling with Parameterized mailto: URLs
-
Method 2: Message-based Polling Using a Polling Application’s Web API
-
Ask Not What the IT Department Can Do for Us
-
II. Groupware Docbases
-
5. Docbases as Groupware Applications
-
The Essential Simplicity of Internet Software
-
Semistructured Data
-
How Docbases Are Groupware Applications
-
Groupware Aspects of the BYTE Magazine Docbase
-
The BYTE Docbase Translator
-
Leveraging Context in the BYTE Docbases
-
Leveraging Context in Other Kinds of Docbases
-
The BYTE Docbase: From Markup to HTML
-
Translator results for a BYTE docbase page
-
Structured title
-
Tree-navigation widget
-
Section and category “more like this” pages
-
Autoactivated URL with referral tracking
-
Interface to partner site
-
Thumbnail illustrations
-
Automatic mailto: link activation
-
Up link
-
Next link
-
Comment link
-
Groupware Aspects of the BYTE Virtual Press Room
-
Single Point of Contact to a Group
-
Simultaneous Push/Pull
-
Layered Presentation
-
Electronic Storage and Retrieval
-
Scoped Collaboration
-
Groupware Aspects of the BYTE Public and Private Newsgroups
-
6. Docbase Input Techniques
-
An Overview of the Docbase System
-
Standard Parts Common to Every Instance of the Docbase System
-
Customized Parts Unique to Each Instance of the Docbase System
-
Anatomy of a Docbase Record
-
Data-collection Strategies
-
A Docbase Form Template
-
Using the Docbase Form Generator
-
Generating an Input Form
-
Receiving and Validating Docbase Records
-
Input Cleanup
-
Validation
-
Previewing Docbase Records
-
Storing Docbase Records
-
Another Use for CSS Tags
-
Transforming Docbase Records
-
Using HTML <meta> Tags
-
Mechanics of Docbase Record Storage
-
Assigning Reports to Analysts
-
Docbase Input in Perspective
-
7. Docbase Navigation
-
Introducing the Docbase Navigational Controls
-
Sequential Controls
-
Counters
-
Tabbed-Index Controls
-
Zen and the Art of Docbase Maintenance
-
Implementing HTML Tabbed Indexes
-
Gathering the Metadata
-
Building the Core Index Structure
-
Accumulating Tab Sets for Each Index
-
Sorting the Records and Tabs
-
To SQL or not to SQL?
-
Low overhead
-
Flexible schema
-
“Good-enough” indexing
-
Constructing the Tabbed-Index Pages
-
Single-page and multipage tabbed indexes
-
Emitting the tabbed-index pages
-
Dynamically Generating the Context-Sensitive Tabbed-Index Selector
-
Implementing Sequential Navigation
-
Dynamically Generating the Sequential Controls
-
THISAPP and THISDOC
-
NEXTDOC and PREVDOC
-
<OPTION>indexname
-
<OPTION VALUE=indexname>
-
The Docbase::Navigate Module
-
A Static Implementation of the Navigational Controls
-
Using Docbase::Indexer
-
Docbase Navigation in Perspective
-
8. Organizing Search Results
-
A Docbase’s Web API
-
URL Namespace Reengineering
-
Issues in URL Namespace Design
-
A Search Engine’s Web API
-
Web-Client Scripting
-
Multiple Engines, Multiple Docbases
-
Excite Versus SWISH
-
Exploiting URL Namespaces and Doctitle Namespaces
-
When URL and Doctitle Namespaces Don’t Suffice
-
An Implementation Plan
-
Finalizing the Search-Results Design
-
Generating the Results Display
-
Processing Search Results
-
Testing the Design with Sample Data
-
Variations on the Display Template
-
The Search::SearchResults Module
-
Plugging in SWISH-E
-
Running the SWISH-E Indexer
-
Classifying SWISH-E Results
-
The SWISH Search Driver
-
The Classifier Family Tree
-
Classifiers and Mappers
-
Inheritance and Polymorphism
-
Anatomy of a Mapper
-
A Specific Classifier
-
Anatomy of a Classifier
-
Plugging in the Microsoft Index Server
-
Working with Index Server Custom Properties
-
Dealing with Cached Properties
-
Using the .htx Template Language
-
Querying the Result Set Using SQL
-
Integrating Index Server into the SearchResults System
-
Exploiting Index Server’s Aggressive Indexing of Custom Properties
-
Using the optimized Mappers
-
Docbase Search in Perspective
-
III. Groupware Applications and Services
-
9. Conferencing Applications
-
Example 1: A Reviewable Docbase
-
Generate a Newsgroup Framework
-
Instrument the Deliverable Version of the Docbase
-
Generate a Feedback Form from a Template
-
Inject Comments Issuing from the Docbase Feedback Form into the NNTP Discussion Framework
-
Transforming an XML Repository into Reviewable Web Pages
-
You Can Easily Convert HTML to Equivalent XML
-
XML Means No More Custom Parsing Code
-
Perl’s XML::Parser Module Is Really Useful
-
XML and HTML Can Fruitfully Coincide
-
A Transitional Approach to XML Authoring Has Near-term Value
-
DTDs Don’t Have to Be Complex
-
Using a validating parser
-
Managing document structure: declarative versus procedural methods
-
Final Observations on the Transitional HTML/CSS/XML Approach
-
You can idealize the installed base
-
XML-ized HTML is a lot more valuable than plain HTML
-
DTDs can’t do everything
-
Instrumenting a Docbase for Collaborative Review
-
Inserting Link Targets into the Docbase
-
Inserting Comment Links into the Docbase
-
Creating the Discussion Framework
-
Generating a Reviewable Docbase Using Perl and XML::Parser
-
The StartTag( ) handler
-
The Text( ) handler
-
The EndTag handler
-
Uses and Limits of the Docbase Review Application
-
An Alternate, Email-based Comment Mechanism
-
Example 2: A Conferencing-Enabled Helpdesk Application
-
Advanced Newsgroup Scripting
-
Step 1: Rewriting Messages
-
Rewriting messages in situ
-
Step 2: Moving a Message
-
Step 3: Moving a Subtree
-
HelpDesk’s Ticket-Closing Function
-
Uses and Limitations of HelpDesk
-
10. Groupware Servlets
-
Why Server-Side Java Matters
-
Safe Memory
-
Simple and Portable Multithreading
-
Network Awareness
-
Java Object Storage
-
Servlet Efficiency
-
Java performance
-
Flexible Servlet-Hosting Options
-
The Polls Servlet
-
Making the Hard Things Easy
-
Making the Easy Things Hard
-
The GroupCal Servlet
-
GroupCal’s HTML Interface
-
Should users write HTML?
-
GroupCal’s data store
-
From simple serialization to object databases
-
Why groupware needs objects
-
GroupCal as a Web Component
-
Importing Data into GroupCal Using its Web API
-
Exporting Data from GroupCal Using its Web API
-
Connecting a Task Database to GroupCal
-
Groupware Servlets in Perspective
-
11. Membership Services
-
The Case for Internet Directory Services
-
The LDAP Consensus
-
A Subscriber-Based Notification System
-
The Hybrid Push/Pull Technique
-
Directory Options for the Docbase Notifier
-
Internal and External Populations
-
A Simple Perl-based Group Directory
-
A Data-Prototyping Strategy
-
Anatomy of the Docbase Update Notifier
-
Implementing Attribute-Based Docbase Subscription
-
An Alternate, Non-SQL Approach to Attribute-Based Subscription
-
Working with Users and Groups in the NT Accounts Database
-
Working with Users and Groups Using LDAP
-
Group Membership in Perspective
-
12. Authentication and Authorization Techniques
-
HTTP Basic Authentication
-
Shared Account Versus Individual Accounts
-
Basic Authentication for Apache
-
Group Authentication in Apache
-
Managing Larger Groups in Apache
-
Basic Authentication for IIS
-
Managing Larger Groups in IIS
-
Protecting Scripts in Apache
-
Protecting Scripts in IIS
-
Attribute-Based Access
-
An Authenticating Script for Apache
-
An Authenticating Script for IIS
-
A Pass-Through ISAPI Authentication Filter
-
An Attribute-Based Authorization Script
-
Scripted Authentication Using Netscape Directory Server
-
An Authorizing Docbase Viewer
-
Using Cookies to Authorize Access
-
Setting a Cookie
-
What to Put in a Cookie and for How Long
-
13. Deploying NNTP Discussion Servers
-
News Server Alternatives
-
Deploying INN on Linux
-
Connecting to INN and Creating Newsgroups
-
Controlling Access to Scoped Newsgroups in INN
-
Deploying the Microsoft NNTP Service
-
Controlling the Visibility of Newsgroups in MS NNTP
-
Protecting MS NNTP Newsgroups with SSL
-
Self-Signing a Server Certificate Using MS Certificate Server
-
Using Index Server to Search MS NNTP Newsgroups
-
Searching MS NNTP newsgroups securely
-
Deploying Netscape’s Collabra Server
-
Creating Users and Groups in Collabra Server
-
Creating Discussion Scopes in Collabra Server
-
Other Configuration Tasks for Collabra Server
-
Advertising Newsgroups to Users
-
Securing Collabra Server Newsgroups
-
Searching Collabra Server Newsgroups
-
Using NNTP Replication with Collabra Server
-
Deploying the MS Exchange NNTP Service
-
Collaboration among Heterogeneous Clients
-
Internet-style Groupware APIs
-
Creating and Publishing Exchange Public Folders
-
IMAP Public Folders Versus NNTP Newsgroups
-
IV. Advanced Internet Groupware
-
14. Automating Internet Components
-
The Object Web and Internet Groupware
-
Using Web APIs as Automation Interfaces
-
Pipelining the Web
-
Web Interfaces Versus GUI Interfaces
-
Thought Experiment: a Web-Style Win32 Application
-
Local and remote capability
-
Bookmarks
-
Pipelining
-
XML-RPC: a Next-Generation Web API
-
Anatomy of an XML-RPC Transaction
-
Other XML-Formatted Request/Response Protocols
-
Using Web APIs to Monitor and Test Groupware Applications
-
Baseline Mode Versus Test Mode
-
Testing Sequences of Actions
-
Testing a Complex Authentication Scenario
-
Reporting Test Results
-
From Quality Assurance to Monitoring
-
Aggregating and Repackaging Internet Services
-
A Technology News Metasearcher
-
Discovering the Web APIs
-
The metasearch strategy
-
Implementing the Newswire module
-
An LDAP Directory Metasearcher
-
15. Distributed HTTP
-
A Perl-Based Local Web Server
-
Platform Capabilities and Application Features
-
The dhttp System
-
A Developer’s View of the dhttp System
-
The Core serve_request( ) Method
-
Hello, World with dhttp
-
Into the Starting Gate
-
Connecting dhttp to SQL Data
-
A persistent connection to the database
-
Implementing Data-Bound Widgets
-
Namespace Completion
-
Implementing namespace completion with dhttp
-
Namespace completion driven by a tabbed index
-
Namespace completion driven by partial input
-
Failed namespace completion leads to data entry
-
Polymorphic HTML Widgets
-
Polymorphic data-bound HTML widgets in perspective
-
Event Bubbling
-
Networked dhttp
-
Services and Applications
-
Data Retrieval with dhttp
-
Extending the Data Viewer
-
Replicating Data
-
What Makes Records Unique?
-
What Happens in Case of a Replication Conflict?
-
Putting dhttp in Perspective
-
Anywhere, Everwhere Services
-
The Next Plateau
-
Replicating Code
-
Secure dhttp
-
Rethinking the Encrypted Channel
-
Secure Proxying
-
dhttp in the Windows Environment
-
Groupware and dhttp
-
16. Epilogue
-
Today’s Internet Groupware Opportunities
-
The Dynamics of Discussion
-
Building Web Docbases
-
Integrating Web and Messaging Components
-
Applications, Components, and Services
-
Data Prototyping and Object Persistence
-
Advanced Techniques
-
Next-Generation Internet Groupware
-
A Modest Proposal
-
V. Appendixes
-
A. Example Software
-
Kit for Chapter 4
-
The Polls Servlet
-
The Poll-Creating Form
-
The Poll-Creating Form’s Handler
-
Kits for Chapter 6 and Chapter 7
-
Contents of the Docbase Kit
-
Installing the Docbase Kit
-
Step 1: Running the Makefile.PL Script
-
Step 2: make (or nmake)
-
Step 3: make Test (or nmake Test)
-
Step 4: make Install (or nmake Install)
-
Reusing the Docbase Kit
-
Kit for Chapter 8
-
Kit for Chapter 9
-
Example 1: Reviewable Docbases
-
Requirement: the Perl XML::Parser module
-
Requirement: an NNTP server
-
Requirement: the Perl TinyCGI module
-
Requirement: the Perl Net::NNTP module
-
Example 2: HelpDesk
-
Requirement: an NNTP server
-
Requirement: Net::NNTP
-
Requirement: dhttp kit
-
Requirement: a DBI/DBD data source
-
Configuring the Apps::hd module for the HelpDesk app
-
Starting the HelpDesk app
-
Initializing the HelpDesk database
-
Using the HelpDesk application
-
Kit for Chapter 10
-
Kit for Chapter 11
-
Kit for Chapter 12
-
Requirements for the Authorization Example
-
Kit for Chapter 14
-
Quality Assurance Monitoring
-
Technology News Metasearcher
-
LDAP Search Aggregation
-
Kit for Chapter 15
-
1: dhttp Top-Level Scripts
-
2: Engine Components
-
3: Application Components
-
Enabling dhttp Applications
-
Starting dhttp and Running Plug-ins
-
Testing Code Replication
-
Testing Data Replication
-
Testing Proxying and Encryption
-
Basic Versus Advanced Encryption
-
B. Internet RFCs: A Groupware Perspective
-
Email: Core Infrastructure
-
Email: Fetching and Managing Messages
-
Email: Semistructured Documents
-
Email: Encryption and Authentication
-
News Infrastructure
-
Web: Core Infrastructure
-
Web: HTML
-
Web: URL Schemes
-
Calendaring/Scheduling
-
Chat
-
Security
-
Public Key Infrastructure (PKI)
-
Directory Services
-
Metadata and Resource Discovery
-
Miscellaneous
-
Index
-
Colophon