Book Description

Collaboration. From its academic roots to the bustling commerce sites of today, the Internet has always been about collaboration: providing a means for people to communicate and work together effectively. But how do you build effective tools for collaboration? How do you build tools that are simple enough for people to really use, yet powerful enough to really facilitate collaboration? In 1995 Jon Udell became executive editor for new media at BYTE magazine, taking on the challenge of building an online presence for a traditional print publication. In meeting this challenge, he discovered that he was managing an online community, not just an online publication. He discovered that he was building not just a set of documents, but a suite of Internet-based groupware applications in which editors, writers, and readers all participated. Practical Internet Groupware details the lessons learned from that experience. Drawn from the author's real world experience, Practical Internet Groupware describes the tools and technologies for building and rapidly deploying groupware applications, and also discusses the design philosophy and usability issues that determine the success or failure of any groupware endeavor. The key to success lies in using simple tools, often open source, that effectively blend in established Internet technologies that have always had a collaborative aspect (SMTP, NNTP) with new technologies that enhance our ability to manage collaborative documents (HTTP, XML). The result is an approach that codifies the idea that many web content providers have long suspected: yesterday's online content is fast becoming tomorrow's network-based applications. In this book you'll learn how to:

  • Base groupware on standard Internet technologies (mail servers, news servers, and web servers)

  • Use simple server- and client-side scripts to automate creation, presentation, transmission, and search of electronic documents

  • Create a base of documents that contain semi-structured data representing much of the intellectual capital of an enterprise

  • Deploy these solutions in a way that scales from groups of a few collaborators to communities of thousands of users

If you've ever been disappointed watching a commercial groupware system used as little more than an expensive email client, or if you've ever wondered how to transform simple email, news, or web clients from document viewers into collaboration tools, then Practical Internet Groupware is for you.

Table of Contents

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