Giter VIP home page Giter VIP logo

monarch-legacy's Introduction

Deprecated: The monarch web application has been moved and largely rewritten here: https://github.com/monarch-initiative/monarch-ui

About Monarch

The Monarch Initiative philosophy is based on the premise that we want to make all the data count. Monarch isn't just another database that slurps data from the typical places and renders it in a different format. We are driven to truly integrate biological information using semantics, and present it in a novel way, leveraging phenotypes to bridge the knowledge gap. Our niche is the use of computational reasoning to enable phenotype comparison both within and across species, with the ultimate goal of improving biomedical research. More project information is available on our website https://monarchinitiative.org/page/about

About Monarch and GitHub

The vast majority of the work we do is in GitHub, though spread across dozens of repositories and not even necessarily all under this GitHub organization (Monarch Initiative). The GitHub organizations that contain the overall work done by the Monarch Initiative team include:

Welcome to Monarch

This repo contains the source and configuration files used to implement the Monarch Initiative web application and associated tools.

You can build and run the web application yourself via the instructions below in Quickstart, or you can use the production version of the Monarch Initiative web interface at https://monarchinitiative.org.

The audience for this README is primarily developers and integrators of the Monarch technology. The Monarch web application has its own user-level documentation as described in Monarch Documentation below.

Recent Changes

Updated front-end modules

Monarch now uses up-to-date NPM modules to provide common libraries such as jQuery, Mustache, D3, and more. Previously, these libraries were duplicated into the Monarch code base and were very out of date with respect to the NPM-available versions.

Improved UI Tooling and Bundling

The Monarch web application was designed to support the integration of diverse JavaScript libraries and HTML fragments. This was to encourage experimentation with different visualization frameworks and technology. The Monarch web application associates a given route (e.g., /page/about) with a handler that generates the correct webpage by assembling pieces via the server-side pup-tent library. This allows different web pages within the Monarch app to have completely different Javascript and CSS resources, and has been useful in the development of Monarch's features.

Recently, we have been evolving the codebase to support modern web front-end tooling, including the use of preprocessors (e.g., LESS, ESLint), the bundling and minification of JS and CSS resources, and a more rapid development cycle. In the short term, we expect this will result in more effective and pleasant development experience, as well as a more efficient web application. In the longer term, this will enable us to build parts of the Monarch UI as a single-page app.

Details on how to use the new tech are later in this document at New UI Tools and Bundling Instructions.

Quickstart

Verify your NPM and NodeJS Installation

You will need to have NodeJS and NPM installed. At the time of this writing, we are supporting the following versions, which can be reported via the npm version command:

> npm version
    ...
      node: '6.11.2',
    ...

Currently, we have been successfully using the nvm tool to configure and manage our NodeJS environment; nvm enables a user to associate a paritcular NodeJS and NPM version with their Unix shell, allowing for each switching between NodeJS versions across different projects. If you need help in getting the Monarch-required NodeJS and NPM versions installed, please read the platform-specific instructions on installing NodeJS and NPM, see Installing NodeJS and NPM for Monarch below.

Download and Install Monarch

After downloading the Monarch GitHub repository (via git clone or as a .zip or .tar.gz), change your working directory to the downloaded source code directory and then type:

./install.sh

This will install the required modules, including NPM-based modules such as gulp and mustache, as well as the necessary NodeJS runtime tools.

Start the Monarch application server

After installation completes, start the server:

> npm run start

You're done! You now have a running Monarch Initiative web application.

Exercise the Application

Try it out by connecting your browser to:

Or view a particular disease, e.g:

Detailed Launch Instructions

Typically, the web application is started with:

> cd monarch-app
> npm run start

which can take an optional environment name parameter of: 'dev', 'stage', or 'production'. The 'dev' environment is the default. Note that you will need to separate the environment name parameter from the npm command by using -- (otherwise, the argument will be consumed by npm instead of the web application. For example:

> npm run start -- stage

This start-server.sh script is a thin veneer upon the underlying command:

NODE_PATH=./lib/monarch node lib/monarch/web/webapp_launcher.js

The webapp_launcher.js can take an optional --port portNumber parameter in addition to an optional environment name. For example:

> export NODE_PATH=./lib/monarch
> node lib/monarch/web/webapp_launcher.js dev --port 8888

Launching via supervisor

On some deployments, it may be necessary to fully specify the path to the node executable. For example:

/usr/local/bin/node lib/monarch/web/webapp_launcher.js stage --port 8080

Monarch Documentation

The Monarch application contains a variety of documentation, available via the 'Documentation' menu on the navbar in the locally running app at http://127.0.0.1:8080 or in the production app at http://monarchinitiative.org.

The Monarch API documentation can be viewed directly from the monarch-app source directory by opening the file doc/index.html in a web browser.

Making changes

See CONTRIBUTIONS.md to learn about the Monarch developer workflow and code submission process.

See README-developers.md for information on the Monarch architecture, internals, and means of extending and integrating Monarch.

Scripts

See bin/README.md.

New UI Tools and Bundling Instructions

By default, when you run the Monarch server via ./start-server.sh, Monarch will operate in bundled mode. This means that when the web server delivers a page (e.g., /page/about), it will invoke a particular handler in lib/monarch/web/webapp.js and that handler (pageByPageHandler, in this example) will generate a custom HTML page by expanding a set Mustache templates and streaming the result back to the web browser. The custom HTML page includes CSS and JS file references that support the particular page being delivered.

One of the things that Monarch has relied on up to this point is the ability for different handlers to present different CSS and JS files to the browser, enabling us to experiment with diverse libraries and frameworks as we extend and integrate Monarch. Unfortunately, this technique is at odds with many of the goals of delivering a high-performance modern website, which encourages bundling, minification and caching of assets (CSS, JS) in the browser.

We have improved our front-end page generation pipeline to accommodate the current on-the-fly page composition technique as well as to allow for the use of modern tooling to bundle and minify CSS and JS assets for efficient delivery and caching. This bundled mode is enabled by default when Monarch is invoked by ./start-server.sh.

Running Monarch in production mode, without webpack-dev-server

During a production deployment, you will first build the web application bundle, and then will execute the app server:

> npm run build    # This takes a minute or so, generates dist/app.bundle.* and other dist/*
> npm run start    # Runs webapp_launcher.js

Alternatively:

> rm -rf dist/*
> webpack --config webpack.build.js --bail
> NODE_PATH=./lib/monarch node lib/monarch/web/webapp_launcher.js

Running Monarch with webpack-dev-server

One drawback to the use of bundled mode above is that any time a developer edits a front-end resource (e.g., a CSS or JS file), they will have to regenerate the bundle using the above commands, which is slow and tedious. That is why most rapid development will occur usig the webpack-dev-server, which allows a developer to make a change to a CSS/JS file and immediately see the result delivered to their browser, without restarting any servers. The only time the slow-bundle needs to occur is during a production build (or during the unit tests prior to a pull request).

To exercise the rapid development tools:

> npm run dev 			# Starts webapp, webpack-dev-server, browsersync, nodemon

Note that your default web browser will open up automatically and you will be pointed to the BrowserSync proxy URL: http://localhost:3000/. If you want to see the application without BrowserSync, use the url: http://localhost:8081/. This 8081 URL is also the one to use when running behave tests:

> cd tests/behave
> source bin/activate
> TARGET=http://localhost:8081 behave

Documentation on the Tooling

BrowserSync

BrowserSync is a free and open source tool and library that is useful for web designers and QA folk for debugging and testing UIs under a variety of browsers and conditions. We at Monarch are primarily using it to provide us with automatic browser reload when we change an asset, but it has many other features.

WebPack is a free and open source tool and library that provides bundling, preprocessing and an efficient module system based upon Browserify and NodeJS require statements. WebPack is very extensible, and the Monarch tooling includes several preprocessors as part of the build chain:

  • LESS Preprocessor
  • Babel ES6
  • Babel ESLint
  • Uglify
  • JSON, CSS, JS, and other asset loaders

webpack-dev-server is a NodeJS server that integrates with WebPack to deliver bundled assets incrementally to a web browser during active development. It enables a developer to see the effect of their changes immediately in the browser, and then later they can perform the slower and more thorough npm run build operation.

Installing NodeJS and NPM for Monarch

Although your development machine may be running NodeJS and NPM currently, it is likely not the exact same version that Monarch is currently supporting (NodeJS 6.11.2 and NPM 3.10.10). The instructions below may help achieve the proper NodeJS and NPM versions. If you are not familiar with NodeJS and NPM, then this may help. Otherwise, use your ordinary technique for achieving NodeJS 6.11.2 and NPM 3.10.10 and skip the remainder of this section.

If you are not running a current version of NodeJS, use the instructions below in:

Once you have a correct NodeJS version running and selected as the current default for your shell (e.g., nvm use 6.11.2), then you can ensure that the correct NPM is installed by using the command:

> npm install -g npm@latest

Verify that you are running the correct versions by:

> npm version

which should output something like:

> ...
> npm: '3.10.10',
> ...

Install NodeJS via nvm (Node Version Manager)

One of the easiest ways to install an alternative version of Node is to use the nvm tool available at https://github.com/creationix/nvm. If you have nvm installed, you can use the following command to installed NodeJS v6.11.2:

> nvm install v6.11.2

This will download, compile and install the 6.11.2 version of NodeJS into the ~/.nvm directory, making it available for the next command:

> nvm use v6.11.2

This command will change your current NVM environment so that it sees a v6.11.2 version of NodeJS.

Installing nvm on MacOSX via HomeBrew

If you have MacOSX, and you have HomeBrew installed, then the following command will be sufficient to install nvm:

> brew install nvm

Follow the instructions printed to your console after the above brew install nvm. The most important part of the instructions are:

You should create NVM's working directory if it doesn't exist:

mkdir ~/.nvm

Add the following to ~/.bash_profile or your desired shell configuration file:

export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh

Installing nvm on MacOSX or Unix via wget/curl

The instructions on the nvm GitHub Site provide a way to install NVM easily; these have been adapted below.

Download install.sh via curl:

> cd /tmp
> curl -O https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh

Alternatively, download install.sh via wget:

> cd /tmp
> curl -O https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh

Run the install.sh script

> bash install.sh

According to the nvm site, this script will modify your .bashrc or .bash_profile automatically. See Manual Install for more information if the above install.sh does not work.

Installing NodeJS via n

There is a tool called n that may be useful for installing the proper NodeJS versions if the nvm-based solutions above do not work. You may have also adopted n for a different project, in which case it may be used for Monarch.

The n tool is available from https://github.com/tj/n where you can find the necessary instructions.


Identifiers

Throughout the Monarch web application, we display external entities using their human-friendly labels (eg. ontology term label 'polydactyly' or gene symbol 'KNG1') as issued by the original data sources; however, while such labels aid human understanding, they often overlap between sources. Therefore, in Monarch, we never rely on the labels to integrate data and never display labels alone without a corresponding prefixed identifier (wherein the local part is exactly as issued by the original data sources and the prefix is as established by convention or as registered. eg. NCBIGene:3827).

For each prefix we display in Monarch, we have documented a 1-to-1 relationship with a resolving namespace, and the prefixed notation (aka CURIE) is usually hyperlinked to its HTTP URI. For more information regarding identifiers terminology and notation, see McMurry et al. https://doi.org/10.1371/journal.pbio.2001414.

More detailed identifier documentation for Monarch is a work in progress, available here: Please feel free to pose any questions or concerns to [email protected].

in action

Using the VueJS API

Run:

./install.sh
USE_SPA=1 npm run dev

monarch-legacy's People

Contributors

balhoff avatar boesb avatar ccondit avatar cmungall avatar davism84 avatar diatomsrcool avatar doctorbud avatar drseb avatar espinoj avatar estiicoder avatar frdougal avatar harryhoch avatar jmcmurry avatar jnguyenx avatar kltm avatar kshefchek avatar lccarmody avatar lwinfree avatar matentzn avatar monicacecilia avatar nathandunn avatar nicolevasilevsky avatar nlwashington avatar pilarcacheiro avatar pnrobinson avatar putmantime avatar sarahjkim avatar twhetzel avatar vincentiii avatar yuanzhou 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

Watchers

 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

monarch-legacy's Issues

JSONP

JSONP output from API calls may be needed for AJAX functionality for deployment of widget on non-Monarch sites.

Get orthology calls

we need a method to fetch orthologs given a gene id
getGeneOrthologs(sourceGeneID,targetSpecies)

I've written a view that integrates the ortholog calls from panther, and some other databases, specifically for human-to-model orthology. It presently includes mouse and fish orthology.

see: http://beta.neuinfo.org/services/v1/federation/data/nlx_152525-14.json?includePrimaryData=true&q=ENSEMBL_ENSG00000160818

Is this the right strategy? Do we want to expand this view to include all ortholog calls between all organisms, or just keep this simple with human-to-other?

Get genotype to gene mapping

A new api call that, given a genotype id, will return it's composite gene ids. (and symbols?) Or should this be given a genotype id, fetch all the genotype properties? This should presently call on nif-0000-00096-4.

Like: http://beta.neuinfo.org/services/v1/federation/data/nif-0000-00096-4.json?includePrimaryData=true&q=MGI_2166318

Perhaps there should be the ability to query with *, so that the user can dump all genotype-gene mappings, organism specific.

it looks like this might have gotten a start, here: fetchMgiGenotype

fetchModelInfo

Clicking on the "model" column under models for a disease leads to this link:

https://secret-harbor-1370.herokuapp.com/model/FBInternalGT:254236,

which leads to

TypeError: Cannot find function fetchModelInfo in object [object Object].

lib/monarch/web/webapp.js, line 400

Script Stack

at lib/monarch/web/webapp.js:400 (anonymous)
at stick/lib/middleware/route.js:215 (route)
at stick/lib/middleware/params.js:102 (anonymous)
at stick/lib/middleware/static.js:62 (static)
at stick/lib/stick.js:37 (app)
at ringo/jsgi/connector.js:42 (handleRequest)

Add "About" tab to homepage

This tab should have two sub-selections (for now).

The first selection is the "Monarch tour" from the Contact tab, which should be relabeled "Monarch Info" or "Monarch Information"

The second is "Releases" and we should move the release info from the "Monarch tour" section, but this needs to be updated.

Fetch all models annotated with an MP term

Need API call that can fetch all models annotated with a given MP term. (This, or something like it, may already be implemented.)

I think first iteration we will probably have to hardcode this to a set of views. At first nif_0000_21427_10 for mouse and nlx_151835-1 for human disease, but eventually we will need this to be a bit more loosey and do a generic federation query and filter the results on "genotype" concepts.

Consider a sort of "I'm feeling lucky" box

We should consider the idea of a search box where the user can randomly select a phenotype, disease, or gene and see what they get, to explore the system.

(just noting the idea- low priority)

API call: Given disease id, what are the top X models

This should have a parameter that specifies the number of models to return by rank (default to 10). Because we have several scoring mechanisms, this will default to just one of them (maybe BMAasymIC), but eventually should be configurable.

Initially this is clearly going to fetch just mouse models. But in the future we'll probably need to parametrize the target species.

This will need to draw on nlx_152525-10 to get the mouse models by rank.

This should return a list of (model id, label, score, metric). (The individual attribute comparisons is supplied by another call...although it could technically be all rolled into one if we wanted it to.)

monarch theme?

confirm use of monarch theme colors and fonts as designed by N. Skillen.

monarch app needs "your feedback here" input box

Ideally this would feed right into this git tracker.
One consideration is that the user may or may not want to provide an email, or otherwise be logged in. Further, most will not be git users so would be anonymous tickets even though we'd want to ideally have their contact info.

Add "email us" subselection to "Contact" tab

Either have the user's browser open up an email in their client to [email protected], or have a separate page with this email address as well as the PIs.

I prefer not to have a submit message box, as I personally find those rather annoying since they are not in your email history.

display variantion in HGVS notation

All (at least human) variants should be displayed in HGVS notation.

I think this should be the default for human mutations, and perhaps a configurable option (by the user) for other species.

IC scores for attributes

In order to properly rank and markup individual attributes (ontology classes) in chuck's grid view (and probably when displaying under the phenotype section), we need the IC scores for the attributes in the annotations.

This data has now been added to the owlsim server, but we need a wrapper function to fetch them. Not sure if this should be a new api call (get score for attribute), or if it should just be built in to any function so that any time an ontology class is fetched, the IC of the class is automatically spit out. This has the unfortunate side effect (at the moment) of possibly requiring two underlying API calls - one to NIF services (either DISCO or OntoQuest), and then a query to our owlsim server for the scores. Maybe that's no big deal, but will certainly add latency time.

One possible query function is simply getICScoresForAttributes(A1...n), where you feed it either a single or a set of attributes and you get back that same set plus scores in JSON.

I think the get LCS scores function ought to return the IC values of the individual classes, as well as the LCS scores.

Iterative querying causing slowdown now closures added

See below for output; when we iterate through all disorders closures are queried making this v slow.

Best short term approach is to turn off closure in this case.

Longer term we shouldn't need to iterate if we just need labels

FETCHING: http://beta.neuinfo.org/services/v1/federation/data/nif-0000-00096-6.json data=includePrimaryData=true&count=1&q=*&project=effective_genotype_name&project=effective_genotype_label&filter=effective_genotype_id:MGI_2175756&
URL: http://beta.neuinfo.org/services/v1/federation/data/nif-0000-00096-6.json?includePrimaryData=true&count=1&q=*&project=effective_genotype_name&project=effective_genotype_label&filter=effective_genotype_id:MGI_2175756&
RESULT: [object Object]
STATUS: 200
Fetched: {"id":"MGI_2175756","label":"Cdk5r1<tm1Lht>/Cdk5r1<tm1Lht> [involves: 129S4/SvJae * C57BL/6]","source":"nif-0000-00096-6","resource":"nif-0000-00096-6"}
FETCHING: http://alpha.neuinfo.org/services/v1/federation/data/nlx_151835-1.json data=includePrimaryData=true&count=1&q=*&includeSubclasses=true&project=disorder_name&project=disorder_label&filter=disorder_id:OMIM_604213&
URL: http://alpha.neuinfo.org/services/v1/federation/data/nlx_151835-1.json?includePrimaryData=true&count=1&q=*&includeSubclasses=true&project=disorder_name&project=disorder_label&filter=disorder_id:OMIM_604213&
RESULT: [object Object]
STATUS: 200
Fetched: {"id":"OMIM_604213","label":"Chudley-Mccullough Syndrome","source":"nlx_151835-1","resource":"nlx_151835-1"}
CACHE undefined

Monarch team page updates

Please remove Carlo, he's no longer with us, unfortunately.

For those of us labeled as PIs, perhaps change our bios to read "X is currently a PI of the Monarch Initiative...." that way we can all have equal importance.

For OHSU, please edit my bio to read:
Dr. Haendel has a BA from Reed College in Chemistry and a Ph.D. in Neuroscience from the University of Wisconsin, Madison. She is currently a PI of the Monarch Initiative, with the aim of providing integrated access to model systems phenotype-genotype data for the purposes of disease hypothesis exploration. She also participates in development of the eagle-i and CTSAconnect ontologies, designed to collect and disseminate information about biomedical resources and enable research profiling. Her research interests are in using ontologies to promote synthetic science though connections within biomedical data, to utilize information science during the course of research and its publication, and to enable scientific reproducibility.

Please add Bryan Laraway and Kent Shefchek to OHSU's section.

Please add Jeremy Espino to the UPitt section.

Please add Sarah Kim (yourself!) to the LBNL section.

We'll broadcast requests for any changes to the other bios.
Should we list the HMC team? I think that would be nice.
Also, should we have a contact us button on this page? that gets sent to [email protected]?

Make "download" buttons smaller and less-present

The Download buttons take up a lot of real estate. We need to change that.
For example:
http://tartini.crbs.ucsd.edu/phenotype/MP_0005449,
on the genotype tab, it means the data doesn't show up but half-way down the browser.
Here's some ideas for changes:

  1. make the download a small tiny link/buttons, next to the table header. I think a small tiny icon for each format would be sufficient (no need for the text that yells at me to download).
  2. allow menu option on the tab to download the data in that tab, in various formats.
  3. make it an option on the left-bar

Tidy term info

List of synonyms should be presented in a more structured way. Add synonym provenance (requires OQ to return this info).

The IDs should be split by database and hyperlinked.

Non-header font needs to be easier to read

Can you change the regular text (non-header) font to be something easier to read, like helvetica? (That's what I did for my posters.) It is fairly compatible with the Kelso font style-wize, and way easier to read when small.

Add API call for groupings/categories

We want to be able to consolidate and/or make visually apparent some kind of higher-level group that an annotation term belongs too. In the first iteration, we'll hardcode the grouping to be the 1st level down of HP/Uberpheno.

There needs to be an API call that returns the group/parent or whatever of a term, which itself leverages OQ.

Security - sanitize URLs

URLs are passed along raw without sanitization to clear out potential security risks. Sanitization calls to prevent XSS would be helpful

phenotype "representation" across organisms for gene (list) X

given a (list of) gene id, i want to see the distribution of orthologs across species, the and the fraction of orthologs that have phenotypes in each species.

a generalization of this should be presented in a graphical way on the front page of monarch, i think.

html escaping problems

Stick is non-uniformly escaping html, and causing all sorts of problems with genotypes and alleles during display. This will need to get tracked down and fixed somehow.

things that end up escaped are omim variation ids, like "ABC < OMIM:12345.0001 > ", but not ABC < rs1234566 > .

similarly, almost any mouse model shows up wrong...whatever is in between the < > doesn't want to show up.

Replace Source with Image

Could I get a list of the sources I need to make images for as well as a way to replace the strings with the images (API call?).

Add pathway details in JSON

I have built several views in DISCO that we can now query via services, in order to build the JSON necessary to paint our pathway diagrams.

The nif views from KEGG (in beta) are:

disease-to-pathway mappings (also contains omim mappings for disease identifiers)
http://beta.neuinfo.org/mynif/search.php?q=*&t=indexable&nif=nlx_31015-2
(canonical) pathway to KO (kegg ortholog) class
http://beta.neuinfo.org/mynif/search.php?q=*&t=indexable&nif=nlx_31015-3
KO to species gene map (orthology map).
http://beta.neuinfo.org/mynif/search.php?q=*&t=indexable&nif=nlx_31015-4

If I am missing something, please let me know!

What this also means is that we also have enough information to have any kind of pathway page. Do we dare make those too?

Jeremy, what kind of API calls do you need? Please define them here. My guess is:

getGenesForPathway(pathway_id,species);
getPathwaysForGene(gene_id);
getPathwaysForDisease(disease_id);

the two above could generically call
getPathwaysForID(id)
but then we'd need an id-to-type resolver

This would be a function that will wrap whatever data we have...presently will be hardcoded to KEGG, but can wrap wikipathways at somepoint too.

On Homepage consider making first entries clickable

On the home page, we (nicely) have an overview of four types of entities in the system. Consider removing the "more details" link, which goes to more details of the main entity (in the attached example, "Parkinson's disease" for the disease box, and instead make the "Parkinson's disease" itself clickable and remove the "more details".

image

Also consider changing title for each box to just the title of that type "Diseases" instead of "Diseases:Parkinson's disease". Instead, move the "Highlighted Diseases" title to below that, making Parkinsons the first expanded entry, and the others following that. In this way it will be apparent that these are simply a few of the highlighted diseases we have (and that Parkinson's is one of them).

Add overall similarity score(s) to "compare" API call.

The current "compare" api call only includes the individual annotations, and their LCS. We should add the comparison/similarity score for the entirety of the set as well. We should add all relevant scores.

This will draw on the precomputed similarity tables loaded into DISCO in nlx_152525-10.

Tour page needs images and descriptions

I finished the skeleton for the tour page, so I am requesting descriptions and images/infographics. These are the sections which probably need information/images:

  • Purpose: I just took the text from the Drupal site.
  • Beta Release: There is nothing here at the moment except a sentence about contacting [email protected] for future beta testers.
  • Future Release: I thought having future models or something here would be cool. A description would be nice, too.

P.S. You can send high quality images to [email protected] or place them in the images folder. Thanks!

screen shot 2013-12-19 at 6 22 49 pm
screen shot 2013-12-19 at 6 22 52 pm
screen shot 2013-12-19 at 6 22 56 pm
screen shot 2013-12-19 at 6 22 59 pm

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.