Git Product home page Git Product logo

dna's Introduction

DNA

This is a highly experimental project. The API is subject to extensive change. If you're intrigued, try it out or drop me a line.

DNA is being developed in Python. It may be extended to other languages in the future.

Introduction & Purpose

When data-rich applications reach a certain critical mass, a lot of the design effort is spent on propagating the data through the application. This is especially the case in graphical applications. For example, take a financial application. The core data is probably a list of transactions, containing amounts, dates, and other information. This data is summarized and displayed in a number of ways. For example, one widget may display all the transactions to/from a specific account.

If the data is changed in any way, all the widgets depending on it need to be updated. It can be difficult or time-consuming to create a straightforward data flow from all the dependencies. DNA is designed for just such a case.

Design Overview & Philosophy

The application's master data-set is stored in the DNA instance. Any number of RNA instances can be linked to the DNA instance. Each RNA instance constitutes a particular expression of the master data.

For example, if the master data is a list of people's names, ages, and favorite kind of pie, one RNA may display a pie chart of favorite pie types, one RNA may display a pie chart of ages, and the final RNA may simply display the number of people in the list.

simple design

In practice, the design will often be more complicated, as shown below:

complete design

Here the master data-set is broken into smaller chunks. Each chunk may have multiple expressions. It is also possible to combine DNA and RNA behavior into one object.

Possible Requirements

  • DNA

    • Support linking to arbitrary number of RNA objects.
    • Do not provide an interface for editing the data.
    • Support a fully-customizable interface for RNA objects to specify exactly what kind of data changes to the master data should be propagated to them.
  • RNA

    • Whenever possible, draw upon the master data-set instead of duplicating data.
    • Provide a consistent interface for editing the master data-set through the RNA object.
  • General

    • DNA and RNA functionality ought to be able to co-exist in one object.

TODO

  • Implement basic DNA chain structure and DNACrawler functionality
  • Implement core DNA
  • Implement DNA chain structure and DNACrawler unit tests
  • Implement interactive visual of DNA chain structure and DNACrawler
  • Design and implement DNA mechanism for classifying changes to data
    • Design and implement mechanism for registering RNA
  • Implement RNA
  • Implement RNA unit tests
  • Implement interactive visual of RNA
  • Test in several use cases
  • Stabilize API
  • Document

Inspiration

Inspiration from this project came from biology, Kivy's properties, and Blender's DNA and RNA. Note that, at present, the terms "DNA" and "RNA" have a much different meaning in this project than they do in Blender (and they aren't quite true to biology, either).

dna's People

Watchers

James Cloos avatar William avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.