I'm reposting here an I wrote since it was well-received on the CouchDB marketing list, but its formatting did not display well there.

Similar documents
Managing Application Configuration Data with CIM

The Stack, Free Store, and Global Namespace

The NoSQL movement. CouchDB as an example

Is this a known issue? Seems to affect only recurring events. I have some of them and all are shifted. Non-recurring events show properly.

In our first lecture on sets and set theory, we introduced a bunch of new symbols and terminology.

Printing Drafts in Outlook Showing Date sent Asked by: OntarioMedicalAssociatin

DECENTRALIZED SOCIAL NETWORKING WITH WORDPRESS. November 7, 2018 WordPress Meetup Vienna Alex Kirk

Formal Methods of Software Design, Eric Hehner, segment 1 page 1 out of 5

Who am I? I m a python developer who has been working on OpenStack since I currently work for Aptira, who do OpenStack, SDN, and orchestration

SOME TYPES AND USES OF DATA MODELS

Evaluation of Visual Fabrique (VF)

Hello everyone. My name is Kundan Singh and today I will describe a project we did at Avaya Labs.

IOS 9 App Development Essentials: Learn To Develop IOS 9 Apps Using Xcode 7 And Swift 2 PDF

Copyright 2014 Blue Net Corporation. All rights reserved

INTRODUCTION BACKGROUND DISCOVERER. Dan Vlamis, Vlamis Software Solutions, Inc. DISCOVERER PORTLET

The IBM I A Different Roadmap

A short introduction to Web Services

Software Design. Introduction. Software Design (Introduction) SERG

Week - 01 Lecture - 04 Downloading and installing Python

Privacy and Security in Online Social Networks Department of Computer Science and Engineering Indian Institute of Technology, Madras

1Anchors - Access. Part 23-1 Copyright 2004 ARCHIdigm. Architectural Desktop Development Guide PART 23 ANCHORS 1-23 ANCHORS

General Error Final Cut Pro While Rendering

CLIENT SERVER ARCHITECTURE:

Getting the Most out of Access Manager

CPSC 320 Sample Solution, Playing with Graphs!

Atrium Webinar- What's new in ADDM Version 10

In today s video I'm going show you how you can set up your own online business using marketing and affiliate marketing.

Register FAQ Calendar Today's Posts Search

Yammer Product Manager Homework: LinkedІn Endorsements

KMyMoney Transaction Matcher

MS-55045: Microsoft End to End Business Intelligence Boot Camp

Close Your File Template

SECURITY STORY WE NEVER SEE, TOUCH NOR HOLD YOUR DATA

For those who might be worried about the down time during Lync Mobility deployment, No there is no down time required

FileWave 10 Webinar Q&A

ICANN Start, Episode 1: Redirection and Wildcarding. Welcome to ICANN Start. This is the show about one issue, five questions:

Battery Power Saving Tips

How to Improve Your Campaign Conversion Rates

Outline for Today. How can we speed up operations that work on integer data? A simple data structure for ordered dictionaries.

Azon Master Class. By Ryan Stevenson Guidebook #10 Google and YouTube Marketing

Formal Methods of Software Design, Eric Hehner, segment 24 page 1 out of 5

Naming Things in Adafruit IO

Survey: 1 Bento Satisfaction

Adobe Security Survey

Software Service Engineering

Increase Your Response Rate

Good afternoon and thank you for being at the webinar on accessible PowerPoint presentations. This is Dr. Zayira Jordan web accessibility coordinator

Can't Add Songs To Iphone From Itunes 11 >>>CLICK HERE<<<

Reading How the Web Works

Oracle Cloud. Content and Experience Cloud Android Mobile Help E

Deploying to the Edge CouchDB

Mr G s Java Jive. #11: Formatting Numbers

BETTER LOOKING S

Downloaded at Thousands of ecommerce & emarketing ebooks 100% FREE downloads!

6.001 Notes: Section 8.1

What about when it s down? An Application for the Enhancement of the SAS Middle Tier User Experience

If you re a Facebook marketer, you re likely always looking for ways to

6.001 Notes: Section 17.5

DESIGNING RESPONSIVE DASHBOARDS. Best Practices for Building Responsive Analytic Applications

Version Copyright Feel free to distribute this guide at no charge...

(Refer Slide Time 3:31)

Helping the Compiler Help You. Thomas Dy

Manually Sync Ipod Touch Itunes Wont Let Me Buy An Album

WINDOWS NT FILE SYSTEM INTERNALS : OSR CLASSIC REPRINTS BY RAJEEV NAGAR

Heuristic Evaluation of igetyou

First the Basics Binary Arithmetic

Amyyon customers can t wait to get their hands on it s new application, developed in Uniface.

Azon Master Class. By Ryan Stevenson Guidebook #4 WordPress Installation & Setup

SOFTWARE DESIGN COSC 4353 / Dr. Raj Singh

Master Cold s. - The ebook. Written with at FindThatLead.com

CODE MAROON TEST SEPT. 30, 2011 SURVEY RESULTS

Joopal and Drumla. Sam Moffatt, Joomla! September 13, 2009

OSGi on the Server. Martin Lippert (it-agile GmbH)

Welcome to another episode of Getting the Most. Out of IBM U2. I'm Kenny Brunel, and I'm your host for

Definition: A data structure is a way of organizing data in a computer so that it can be used efficiently.

Manually Run Java Update Windows 7 64 Bit Problem

Web Hosting. Important features to consider

Chapter 5 THE STYLE. Style plays a key part in the overall experience. After making your app intuitive it is time to add some flair.

Programming via Java Recursion

CFMG Training Modules Classified Ad Strategy Module

CSE 142/143 Unofficial Commenting Guide Eric Arendt, Alyssa Harding, Melissa Winstanley

VOX TURBO QUESTIONS AND ANSWER

OneNote vs. Evernote: A personal take on two great note-taking apps

Thank You. Hello. Special offer

User Experience. 10 Principles to Ensure a Great. on your Website. Issue 3. An Appnovation Digital ebook

Show notes for today's conversation are available at the podcast website.

COPYRIGHTED MATERIAL. Joomla! Jargon: Understanding the Language of Joomla!

15 Minute Traffic Formula. Contents HOW TO GET MORE TRAFFIC IN 15 MINUTES WITH SEO... 3

Microsoft End to End Business Intelligence Boot Camp

Decision Management Community

Q&A Session for Connect with Remedy - CMDB Best Practices Coffee Break

Recording for the Blind Part One

Data Structures And Other Objects Using Java Download Free (EPUB, PDF)

============================================================================

Managing State. Chapter 13

QGIS Application - Bug report #18988 QGIS Server rendering different from Desktop rendering

Case study on PhoneGap / Apache Cordova

WIREFRAMING 101. Essential Question: Can We Possibly Build an App? Learning Targets: Lesson Overview

Application management in Nokia: Getting the most from Company Apps

Binary, Hexadecimal and Octal number system

Transcription:

I'm reposting here an email I wrote since it was well-received on the CouchDB marketing list, but its formatting did not display well there. One of CouchDB's developers asked, How can we make it that CouchApps strengthen CouchDB and not weaken it by adding confusion? How do CouchApps fit into the CouchDB story? I've been thinking about this discussion a little, and wanted to offer a few ideas from the perspective of a user. In essence, I think the CouchDB community should focus on marketing two concepts named "CouchDB," and "Couch App Server." This is a middle ground between the two extremes of "R.I.P. CouchApps" and "CouchApps are CouchDB's greatest feature!" The middle ground is achieved by distinguishing CouchDB and CouchApps, and marketing them as two distinct ideas. You don't have to stop marketing the idea of CouchApps; just market them as something distinct from CouchDB. Both can be positively marketed, and succeed or fail on their own merits. But by distinguishing the two, if CouchApps confuse people, they need not turn people away from CouchDB. My thoughts and reasons for this are below. 1. Evaluate the current marketing. CouchApps are mentioned front and center in the first two paragraphs about CouchDB at http://couchdb.apache.org/. They are mentioned in concept, though not by name. They are implied in the slogan, "A Database for the Web" which is explained by those two paragraphs. If CouchDB's marketing should take a different direction in the future, that marketing ought to deal with the question of whether the promises made in those two paragraphs are true. Specifically, "CouchDB comes with a suite of features, such as on-the-fly document transformation and real-time change notifications, that makes web app development a breeze." Does CouchDB "make web app development a breeze," or not? These two paragraphs are the first ones to change. 1 / 6

2. Make CouchApps secure. If multiuser data within CouchApps cannot be properly secured presently because CouchDB does not require clients to send the Host header (I tried to test whether this is the case per this email ), then make a config option to make CouchDB require the Host header. It sounds easy to do, and the Host header is required in HTTP 1.1. Or create a "default _rewrite path" configuration parameter as Giovanni described. I expect this would make SmileUpps' CouchApp architecture secure for anyone who wants to use that architecture. 3. Don't promise CouchApps are easy. SmileUpps' CouchApp architecture is the only CouchApp architecture I'm aware of which has (almost) implemented document-level ACLs without some proxy server between the browser and CouchDB. Others may exist; I just don't know about or remember them. I have 15 years of part-time experience in full-stack web development, and have written two small CouchApps. It doesn't appear to me that SmileUpps' CouchApp architecture is particularly easy for novices to learn and implement, at least at present. Perhaps with a Yeoman generator or the like it could become easy. But its current complexity does not seem to me to "make web app development a breeze," that is, if you want to prevent some users from reading all the data in one database, which is a normal or at least common requirement in web development. The end result is not good--couchdb's promise of easy CouchApps will lead novices to build insecure apps. I wish CouchApps did make web app development a breeze, and would like to see CouchDB still be able to use that promise in its marketing. But for now, it seems to me that CouchApps shouldn't be marketed to novice developers as an easy point of entry into web development. CouchApps are rather a way for developers who already know (one of the many ways) how to structure a single-page app to serve that app out of CouchDB, and access CouchDB as the app's database. It seems to me a developer should learn Backbone or Angular before CouchApps (like the Chatty tutorial assumes: https://www.smileupps.com/couchapp-tutorial-chatty-read-api ). So, because they generally require 1) knowledge of a client-side framework, 2) knowledge of CouchApps' file structure and functionality, and 3) implementing a very specific CouchApp configuration to be properly secured, CouchApps aren't really an entry point into web development. Instead, CouchApps are a way for non-novice developers to use CouchDB as both a database and an app server. 4. CouchApps could rise again! CouchApps' prospect of master-master replication of not only data, but apps, remains attractive to me. Give users their data, and give them their code! It's a powerful thing. What if we all owned Facebook running in PouchDB in our browsers, without a persistent central server? Diaspora, CouchAppSpora/Monocles, and a bunch of other software have aimed in this direction. So I don't think it's wise to pull back completely from marketing CouchDB's CouchApp features. Perhaps they could still be the future. 2 / 6

5. Reprioritize marketing to serve today's web. "CouchDB is [still] a database that completely embraces the web." But the web has changed since CouchDB first embraced it. Web apps have moved toward offline-first and syncing data to the server via REST. Web apps don't live on the server anymore. They live in your phone. So, as an app developer, I don't need routing or SEF URLs (vhosts/rewrites) on the server; I need routing in the client. While I still want to be able to query a CouchDB view via HTTP, or maybe even a show or list on occasion to provide an RSS feed, more often I want to query my data locally in PouchDB or something like it. So it doesn't make sense to me to prominently market CouchDB's "on-the-fly document transformation" anymore. I still want the feature, but it's not in the core of what I need. What I need is a database that syncs. CouchDB's other application server features are nice when I want them. 6. Market an accurate Venn diagram. The relationship between CouchDB's CouchApp features and CouchDB's non-couchapp features is not one where you can divide the features neatly into two mutually-exclusive sets. Rather, CouchApps use nearly all of CouchDB's features (except maybe replication), and non-couchapps use a subset of CouchDB's features. CouchApps may or may not use replication depending on whether they use something like PouchDB, and whether they use replication for deployment. To put it in terms of my main proposal, future "CouchDB" would be a subset of CouchDB's current features, and "Couch App Server" would be a superset of that future "CouchDB" set. This makes me think that it is hard for people to grasp what it means to disable the features which support CouchApps, because they too easily believe this means disabling the superset; disabling the whole of CouchDB 1.x's features. So I think the best way to explain this to new users is to say that CouchDB is a database, and it comes with some extra features which are useful for an application server. The first two paragraphs at http://couchdb.apache.org/ say as much, but they do not distinguish these two concepts in a way that is obvious and memorable to a newcomer, or that would convince the newcomer that they might want to use CouchDB as a database alone apart from its additional application server features. The newcomer is left with the impression that the features unique to "Couch App Server" are actually part of the database, but while they are part of CouchDB, yet they are not technically database features; instead, they are web file server and document transformation features. The way I perceive the natural groupings of CouchDB's features is as follows: i) Database: The database that syncs (views (=indexes), HTTP interface, replication, filters, 3 / 6

MVCC, changes feed, authentication) ii) [App Server?]: Web file server (vhosts, rewrites, attachments) & design docs/stored procedures for further document transformation (views, shows, lists, update handlers) i) is the core set of features, and i) + ii) = CouchApps. I think this distinction should be displayed textually and graphically on CouchDB's front page. Interestingly, ii) contains features of the past (server-side apps) and the (maybe) future (client-side apps, deployed through replication). It would be worth noting this distinction on CouchDB's front page to help newcomers decide to what extent they need Couch's app server features. It remains possible that someday the present swing toward client-side apps will reverse, and even these server-side features could become more of the future. So I don't think the marketing should characterize CouchApps as a dying remnant from the past which will not be relevant in the future. Earlier in CouchDB's lifetime we thought CouchApps using all of ii) were the future. Now because there is less need for server-side routing and document transformation, the main parts of ii) which might be the future are views (for occasional direct queries over HTTP - yes, I included views in both i & ii), attachments (for serving/replicating your app's files from the database), and lists (for RSS feeds or data syndication/federation through filtered replication). But it would be good to say on CouchDB's front page that a developer might not need any of the features in ii) today. So Couch's app server features should not be marketed as extra features for advanced users. They don't add functionality which every developer will want after they master the basics. Rather, they are extra features which permit you to write limited server-side logic for your application, if you find you need it. This is actually a useful point for a newcomer, because while single page applications running in the browser can perform most of the logic we need today, yet (aside from issues of data security and proprietary code, which are the realm of server-side node changes listeners) due to reasons of architecture and efficiency, we are not able to run all our logic in the browser; it's still wise to keep some logic in the database on the server side. Often we're still dependent on server-side logic, and Couch's app server features can meet that need to a limited extent. One result of the features in ii) is that your app's server-side and client-side logic can be synced from one server (CouchDB instance) to another. For example, from your local 4 / 6

development machine to the deployment server, or from one deployed application instance to several other nodes all running the same application, but with different filtered sets of data. This warrants the slogan, "Apps that sync!" However, that slogan might make people think the syncing in view is between CouchDB and the web browser, which is not what I mean by the slogan. The apps' syncing is actually done by the features under i), but they are apps because of the features under ii). So the "Apps that sync" do so because they are in "The database that syncs." 7. My proposal. So I propose splitting the features described in the first two paragraphs at http://couchdb.apache.org/, features which are mixed together there under the one name of "CouchDB" without any clear distinction, into two sets of features under two separate names and slogans: 1. "CouchDB" - the database that syncs! 2. "Couch App Server" - apps that sync! Since I (as an app developer) only need CouchDB, market CouchDB most prominently. But since Couch App Server is nice when I want it, and might be a good method for deploying app updates, market it as a nice but limited set of server-side features your app can use (even to serve your app), which can be secured, and which can be used to deploy app updates, but which you probably don't need if you are using a modern client-side application architecture. If people want server-side features, this will be a selling point. If people don't want server-side features, they will appreciate being told that they don't need to research CouchApps. Because I want Couch App Server's features sometimes (RSS feeds), I think they should be enabled by default. I don't see why it would be necessary to provide a configuration option to turn them off, but I wouldn't mind if they were turned off. Though a graphic designer could figure out a better way than this, I envision presenting this distinction between "CouchDB" and "Couch App Server" in a graphic which shows CouchDB as the fundamental layer of Couch's architecture, and Couch App Server as an optional layer on top of CouchDB which includes additional features. Below the graphic, I envision two columns of text 5 / 6

, with CouchDB's description on the left, and Couch App Server's description on the right, and somehow CouchDB being portrayed as the most important of the two. If you want to hide Couch App Server on the front page, then present only CouchDB on the front page, and provide a link to a page describing "Additional features" which presents the two-layer graphic and two-column descriptions I mentioned above. If you want to remove the word "Couch" from "Couch App Server," just call it the "App Server." That was easy. : ) 6 / 6