Return-Path: X-Original-To: apmail-couchdb-marketing-archive@minotaur.apache.org Delivered-To: apmail-couchdb-marketing-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 17B6F19246 for ; Thu, 21 Apr 2016 22:10:35 +0000 (UTC) Received: (qmail 66293 invoked by uid 500); 21 Apr 2016 22:10:34 -0000 Delivered-To: apmail-couchdb-marketing-archive@couchdb.apache.org Received: (qmail 66251 invoked by uid 500); 21 Apr 2016 22:10:34 -0000 Mailing-List: contact marketing-help@couchdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: marketing@couchdb.apache.org Delivered-To: mailing list marketing@couchdb.apache.org Received: (qmail 66239 invoked by uid 99); 21 Apr 2016 22:10:34 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 21 Apr 2016 22:10:34 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 099941A000F for ; Thu, 21 Apr 2016 22:10:34 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.308 X-Spam-Level: * X-Spam-Status: No, score=1.308 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=2, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01] autolearn=disabled Authentication-Results: spamd2-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=kowalski-gd.20150623.gappssmtp.com Received: from mx2-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id n0G4HPLnzeZQ for ; Thu, 21 Apr 2016 22:10:31 +0000 (UTC) Received: from mail-vk0-f48.google.com (mail-vk0-f48.google.com [209.85.213.48]) by mx2-lw-us.apache.org (ASF Mail Server at mx2-lw-us.apache.org) with ESMTPS id 31EB15F1D5 for ; Thu, 21 Apr 2016 22:10:31 +0000 (UTC) Received: by mail-vk0-f48.google.com with SMTP id t129so115120131vkg.2 for ; Thu, 21 Apr 2016 15:10:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kowalski-gd.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to; bh=bWAiXxPH22HDV/zSpIBczE4kZNgLaSuV3Nc4TkENQYU=; b=XKZG+BF37T1wnmjtlkrFj3L4q3ftO8QALkXZ5Bk+tzxfA/aqP1Ou7tnQkokgpuI9Il 5cfWIyvqe6yYhbCXY0E0ZlQp/a8bH20buaYyleEguKQ4zGC9UygxEKWtzcf0uZKuPfn7 b7Tb8zjBbrj5WqqWEhqJ/NcZCzSPWcGu7DLfZHqJ0dNh6vvUhTB4dOw9NShNgUba3cIh dIKbl9cw65Ibwae0lJHSWHksQPfxEr7B+Uz7KyEUNj/X8zF7Vzjw7k1c4JAP6Quoze2w E6YyXofoz/Q1y31lxY2/4MXOL83KwexVeov0w5kymABfIpBLQP52GMKXOu6KydrdBJGP uD7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to; bh=bWAiXxPH22HDV/zSpIBczE4kZNgLaSuV3Nc4TkENQYU=; b=N8KuZZLLvnCX/uCrwEZYsVndZ/DUG4/vRM6bLbkj5NCaPSsAQ7lZxydTf6+kUk+yFa FJ2AvhmU55R0SuYfG85xP/PFYts/VBahALHuUKneVUcHkg/f4iToTh1jE72mPEyr7dvD WPXeADUvR4vNTUKC6mvwQtQrm11Cl1SCTdprdE4CzqdIr/sOofJoUcAAE1JcoH6VFAsn qNtkhJdEEzZqwebriqxRM22Q7iZjRRjHeF3/sc7pXE/gXaEgHMioF4s7BWZiUPdyjmv7 UTxtFToZSxLk13ZUwEPHdsfzSNEyhtwIV29K2BDoOzi4MxetJHZbwUHUdtGXbpYMD7df 9oHA== X-Gm-Message-State: AOPr4FXnSnNha1CDsSz3eYdzmBZWgCY35zDTexMa4NLkKKZQcE9YifauNAZwOzdhKPfZ7e8vNkyhYHzqA3iDog== MIME-Version: 1.0 X-Received: by 10.31.142.203 with SMTP id q194mr8848575vkd.95.1461276623917; Thu, 21 Apr 2016 15:10:23 -0700 (PDT) Received: by 10.31.170.200 with HTTP; Thu, 21 Apr 2016 15:10:23 -0700 (PDT) X-Originating-IP: [2a02:2028:755:1d01:cd25:d4d8:d699:c2eb] In-Reply-To: References: <75A2E329-7EF5-464A-AC72-A26F30A62679@apache.org> Date: Fri, 22 Apr 2016 00:10:23 +0200 Message-ID: Subject: Re: Blogpost: "Databases aren't boring" From: Robert Kowalski To: marketing@couchdb.apache.org Content-Type: multipart/alternative; boundary=001a1143a728168802053105fa18 --001a1143a728168802053105fa18 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hey there! Here is the latest version, thanks to the awesome help of Jenn! I am leaving for Cuba in 6 hours, it would be cool if someone could publish it. The feature is already merged. Please decide how you want to handle the video (embedded youtube, gif or something else). Thank you, Robert Original video: https://dl.dropboxusercontent.com/u/1809262/rev-browse.mov gif: https://dl.dropboxusercontent.com/u/1809262/revision-browser.gif Article: --- # Databases aren=E2=80=99t boring It sounds super boring, sometimes scary. Let=E2=80=99s talk about database development, data management, and database administration. Sounds boring, right? I promise: it isn=E2=80=99t. I mainly develop for [Fauxton]( https://github.com/apache/couchdb-fauxton), the UI for CouchDB we=E2=80=99l= l release with 2.0. We are developing, designing, and concepting a UI for administration and data management. When I tell fellow developers and designers that I develop a database, many of them look scared. Sometimes they also look bored, because people rarely imagine data management is exciting. Some of them might think of boring database courses in college. In this article we=E2=80=99ll discover what ma= kes database development so interesting and exciting. One of our main objectives is to make data management as frictionless as possible for the user. How can we lower the entry barrier for new users, but still support our power users? How can we display data in an accurate, detailed way, but still have a high density of information? How do we measure our success without traditional systems to measure engagement, like tracking? It is important to remember--we can be successful only if our users are successful. A recent example where we want to make our users more successful is [eventual consistency and MVCC]( http://guide.couchdb.org/draft/consistency.html). Large numbers of conflicts can be problematic; they will slow down the database and take up a lot of space. Some of the Fauxton developers recently had a hackweek. As part of one project we asked ourselves: =E2=80=9CHow can we make conflict d= etection and resolution a first class citizen in CouchDB and make it as frictionless as possible?=E2=80=9D Our goals: - Conflict detection should be as easy as possible - Make conflict resolution as easy as possible and provide necessary toolin= g - Help to avoid situations where a large number of conflicts become problematic - Provide better education and tutorials for conflict resolution, directly in the dashboard We focused mainly on conflict resolution as our time was limited to one week. A document with conflicts has different revisions, and Couch elects one as the =E2=80=9Cwinning revision.=E2=80=9D How to choose the right revi= sion and get rid of the other ones? Our project, codenamed =E2=80=9CThe Revision Browser,=E2= =80=9D was born. We wanted to provide a way to easily diff revisions, and inspect the revision tree. We also wanted an easy way to delete conflicting revisions and select other revisions as a winner. The first, ugly prototype had two dropdowns: ![The first prototype](first-prototype.png) We are a distributed team, so use video calls for evaluating the iterations. We demo the current, incomplete work. Whenever possible, we test ad-hoc changes directly in the browser during the session. One addition that came up during our demos was to provide another view mode next to the =E2=80=9Cdiff mode=E2=80=9D. It shows both conflicting document= s next to each other: ![Both conflicting documents next to each other](1-to-1.png) After the hackweek we had some work left to bring the project over the finish line. I am happy to announce that we have a minimum viable product now: ![The diffing for both conflicting documents](diff.png) The feature was created in close collaboration with other developers and UX researchers. [Here is a video showing the new features in action]( https://www.youtube.com/watch?v=3D3G8d7PzMVsk): Data management is also interesting from the technical point of view. How can we display a lot of documents, but keep the application snappy? The revision browser is written in React. The code itself is pretty concise as we recently added ES 2015 / ES6 support to Fauxton. Thanks to our test coverage, we can refactor large parts of Fauxton. Recently, we changed the whole infrastructure underneath without much trouble. Interested in the code? It is available at: https://github.com/apache/couchdb-fauxton/pull/67= 0 ## Conclusion Despite its image, data management and database administration IS interesting. We face hard problems from a product point of view. They are challenging and it is fun to solve them in a team including developers, UX researchers, and designers. We also face interesting technical problems and solve them with the best technology available. ## About the author Robert Kowalski is a passionate software engineer and CouchDB contributor. He enjoys traveling and recently released a book about command line tools in Node.js, [The CLI Book](http://theclibook.com). On Thu, Apr 21, 2016 at 12:50 AM, Robert Kowalski wrote: > here is the original source of the video (maybe to create better gifs i m= y > does not suffice?): > https://dl.dropboxusercontent.com/u/1809262/rev-browse.mov > > On Thu, Apr 21, 2016 at 12:48 AM, Robert Kowalski wrote= : > >> here is the gif: >> https://dl.dropboxusercontent.com/u/1809262/revision-browser.gif >> >> On Tue, Apr 19, 2016 at 8:56 PM, Jan Lehnardt wrote: >> >>> ooooh, I really like this, the feature and the writeup! Thanks for >>> offering to post >>> it on the CouchDB blog. I=E2=80=99d be very much in favour! >>> >>> I=E2=80=99d suggest we put this in a google doc and give it an editoria= l >>> once-over (looking at Jenn with puppy-eyes ^^), but then this is ready = to >>> go. >>> >>> The video could maybe be a gif, so we can tweet/share it more easily, i= f >>> you are up for converting it (or anyone, really). >>> >>> Great job! :) >>> >>> Best >>> Jan >>> -- >>> >>> >>> >>> > On 19 Apr 2016, at 19:39, Robert Kowalski wrote: >>> > >>> > Hi there, >>> > >>> > I went into a hip cafe this weekend, drank espressi and wrote a >>> blogpost! >>> > >>> > The draft is at >>> > >>> https://github.com/robertkowalski/couch-labs/blob/blog/blog/databases-a= re-not-boring/databases-are-not-boring.md >>> > >>> > If you want we can publish it on the CouchDB blog, but I am also happ= y >>> > to publish it somewhere else. >>> > >>> > btw.: seems GitHub does not support embedded videos in markdown, so I >>> > linked it for the draft. >>> >>> -- >>> Professional Support for Apache CouchDB: >>> https://neighbourhood.ie/couchdb-support/ >>> >>> >> > --001a1143a728168802053105fa18--