Coder Social home page Coder Social logo

discograph's People

Contributors

dougaitken avatar josiah-wolf-oberholtzer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

discograph's Issues

Clean up spline-link creation.

  • The original link should be the one that is animated in D3.
    • It should receive a reference to the intermediate node.
    • It should receive isSpline=false
  • The generated links should be renamed for clarity:
    • entity-key-A-role-[entity-key-B] (going to the intermediate)
    • [entity-key-A]-role-entity-key-B (coming from the intermediate)
  • The isPrimary key-value is not necessary then

Refactor relation graphing to prioritize group membership.

  • On each entity encountered during a round of collection, collect that entities relations
  • Instead of adding the entities referenced in the relations to the pending list, add the relations themselves.
  • On the next pass, sort the pending relations by role, prioritizing membership and aliases.
  • Collect the entities from the sorted relations, iterate over those to collect the next batch of entities and relations.

Listen for "click" events on nodes.

This conflicts with "dblclick" events, which have to be treated as a special case of "click" events.

Supporting "click" events will let us add highlighting to selected nodes and pull up meta-data panels (YT videos, release histories, bios, etc.).

Determine canonical agentive order for Relation entities.

Basically, for all non-structural relations (Member Of, Alias, Sublabel Of), the left-hand side should be the agent, and the right-hand the receiver.

L "Released on" R
L "DJ Mix (of)" R
L "Remix (of)" R
L "Performer (for)" R
L "Curated By" R
L "Written-By (Writing for)" R

Implement relation extraction.

Extraction from classes:

  • Artist
  • Label
  • Release

Other improvements necessary:

  • Store genre
  • Store country
  • Store style (?)

Implement front-end testing.

Find solutions for automated testing of the front-end Javascript components.

Study the D3 source, as that project has a test suite.

Implement TypeAhead autocomplete artist search.

  • What is the state of Bootstap-TypeAhead / Twitter TypeAhead / other tools?
  • Typeahead (or similar) needs to be integrated into the site's Javascript.
  • Any dynamically-created elements need to be styled correctly.
  • Caching (maybe pre-fetching?) to speed-up the search process.
  • Hitting enter on the search bar should navigate to the relevant page.

Add "random" field to each primary model.

On insert, set "random" to a random value between 0 and 1.

This provides the most performant technique for selecting random values from a collection.

Simply use cls.objects(random__gte=random.rand()).first().

Explode Discogs XML files into per-record files.

Name the files by their intended class and Discogs ID.

The incredibly massive files provided are cumbersome. If any part of an import fails, the file must be scanned up to that point. This process can takes hours and hours. By providing individual files per record, it should be easier to simply sort and search the file system, compare against the current contents of the database, and continue from there.

Implement client-side "paging" on networks.

API queries should return all nodes and edges up to just beyond node/link limits. Each node and link should be associated with one or more "pages". For example, the center node should appear in all pages.

On the client-side, the entire network will be received, but only one " page" shown at a time. This will ensure that a) the visualization is always responsive and b) all 1-degree relations can be seen from the same center.

This will make visualizing non-alias, non-band relations much more palatable.

Migrate from Flask to an async framework.

Discograph's graph search is always going to be potentially complex. This will become even more crucial before role-based searching goes live, as the number of relations increases by one to two orders of magnitude.

We should migrate to an asynchronous framework to make this as pleasant as possible.

See:

Extract/invent a reasonably-sized XML test-set.

Providing a small (~6 artists, ~3 labels, ~12 releases) XML collection will allow for testing all system functionality without relying on a) the complete Discogs data dump or b) hand-extracted XML excerpts from the same.

Support browser history pushState and popState.

Should be possible to navigate forward and backward through the states and have the graph update dynamically.

This will require moving some of the logic out of the node double-click callback into a standalone function which can be called to update the entire graph based on a node id.

Implement affordances for multiple links sharing target and source.

A single link can continue to use a line.

Multi-links need to use arcs. They therefore also need to be grouped by source and target. Grouping is going to be tricky, as we can't rely on simply pre-computing their group and giving them an index. Why? Links may appear and disappear as auto-pruning happens. Unless, of course, we make it an invariant that so long as two nodes appear on screen, all of their links also appear.

Handle links with same source and target.

These currently render as a link segment normal to the node's circumference. Render instead as some kind of arc moving away and back, with a slight separation within.

Refactor JS code into multi-file layout.

Will improve clarity as the JS increases in size and complexity.

Some questions:

  • What is the directory structure of the exploded code versus the single-file built version.
  • What tools to use for concatenating (mbostock's smash?)
  • Does this require that the entire project (including Python source) have a src/dist or src/build structure, with the built code deployed from source into build directory?
  • What tools to use for that?
  • Can JS rebuilds be automated like Flask's server-restarting?

Investigate migrating DB to PostgreSQL.

PostgreSQL supports full-text search and BSON fields, making it able to mimic MongoDB nested structures.

If the memory requirements are not prohibitive, PostgreSQL could replace the current MongoDB/Sqlite frankenstein.

Refactor ArtistMembershipGrapher.

The new version should:

  • Rely on Relation, not simply Artist.
  • Support all relation types available.
  • Allow filtering by relation type.
  • Report the type of each node returned (Artist or Label).

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.