The OpenIshkur Project
OpenIshkur is an open-source, freely editable version of Ishkur's Guide to Electronic Music that attempts to document the connections between music genres as well as provide both introductory information to the genre as well as actual streaming samples of its most exemplary works. Anyone can contribute to the descriptions and samples of each genre, and even add new genres entirely. Much like the original guide, all genres are connected in a vast web.
OpenIshkur's goals are to emulate the original guide, update it for modern times, and provide a means for others to do so in the future. Part of why Ishkur's guide stopped being relevant was because it could only be updated by one person, something that OpenIshkur cannot suffer from (unless people stop using it).
Requirements
Setup
To set this application up, clone this repo and run the following command from its root directory:
$ ./bin/setup
You can now start the server:
$ ./bin/rails server
Architecture
OpenIshkur is primarily designed as graph of genre connections, whether by a genre influencing another (a "descendant") or a genre being influenced by another (an "antecedent"). Additionally, each Genre record embeds a collection of Sample records that wrap an uploaded file handler and some metadata surrounding the sample, as well as an auto-incrementing value used for the button display. Although Users do create Genres and Samples, there is no relation back to the User for creating either of these. The relationship between Genres is represented as an Influence object, which is used to build the lines between nodes on the graph. Apart from this graph, there isn't much else going on right now...though there are plans to implement permissions systems as well as versioned genre updating.
The front-end frameworks used most heavily are Zurb Foundation and
jQuery. Foundation forms the basis of the CSS layout, and enables as
much of the site to be responsive by default as possible. jQuery is used
to provide a consistent interface for cross-browser Ajax and DOM
manipulation (OpenIshkur makes use of Rails UJS whenever possible,
which also uses jQuery under the hood). But the real meat and potatoes comes
from vis.js, our graph visualizer library. It presents the graph of
genre connections as a web of networked nodes, with lines connecting the
antecedents and descendants. With the exception of the /genres.json
endpoint used to serve data to vis asynchronously, all content on the
site is generated by the server, dynamically, and served remotely rather
than being compiled and generated on the client-side. This is to take
advantage of Rails' fragment caching features, which are in use heavily
throughout the site. We also make use of HTTP caching in production to
ensure all data comes back as fast as possible.
Direct file uploads to S3 occur asynchronously using Refile's built-in JS file uploader. Currently, there are no transcoding options...we just only allow MP3s to be uploaded, but that may change in the future.
Contributing
Contributions of any kind are always welcome to this codebase. However, when making a pull request please ensure your changes are properly tested and the build has not broken.