Giter VIP home page Giter VIP logo

smartpeak's Introduction

SmartPeak

Documentation Status CircleCI Build Status (Windows, Linux & macOS) License MIT Clause

SmartPeak is an application that encapsulates advanced algorithms to enable fast, accurate, and automated processing of CE-, GC- and LC-MS(/MS) data, and HPLC data for targeted and semi-targeted metabolomics, lipidomics, and fluxomics experiments. The software is based on the OpenMS toolkit.

SmartPeak provides graphical- and/or command-line-based user input validation, workflow configuration, data visualization and review, logging, and reporting. SmartPeak can be run on multiple operating systems or run on cloud infrastructures. The workflow automates all steps from peak detection and integration over calibration curve optimization, to quality control reporting.

image

Building from source

To compile SmartPeak from sources, use the circleci script as a guide. The circleci script can be found in .circleci/config.yml and the 3 builds Windows, Linux and MacOS are supported here.

Running the tests

The tests are run with ctest command.

ctest

In order to run a specific test, use -R option and the test class name (without .cpp extension)

ctest -R Utilities_test

Running the examples

The collection of examples is located at src/example/data directory of the SmartPeak source code. The directory contains examples of different kinds of data in .mzML format and their corresponding configuration files.

Log path

Default locations of logs:

  • Windows: C:\\Users\\<user>\\AppData\\Local\\SmartPeak
  • Linux and MacOS: ~/.SmartPeak

User can change default location and specify directory where the logs are stored by setting SMARTPEAK_LOGS env variable. If directory specified by the path doesn't exist, SmartPeak will create it.

Using SmartPeak GUI

  • After successful installation of SmartPeak, on Windows open menu start and browse for relevant icon, you can also find the shortcut on desktop.
  • If built SmartPeak from the source code, from the build directory run ./bin/SmartPeakGUI for Mac and Linux, or ./bin/[Debug or Release]/SmartPeakGUI for Windows. Or double-click SmartPeakGUI executable in the file browser of your OS.
  • Start the session with File | Load session from sequence
  • Choose the corresponding directory with Change dir. The path to example folder can be shortened to f.e. /data/GCMS_SIM_Unknowns
  • Select the sequence file

image

  • The integrity of the loaded data can be checked with Actions | Integrity checks. The results of the integrity checks can be viewed with View | Info.
  • Edit the workflow with Edit | Workflow. You have an option to cherry pick the custom workflow or to choose the predefined set of operations. For example, the workflow steps for GC-MS SIM Unknowns are the following:

image

  • View and verify the workflow steps and input files with View | [table].

image

  • The explorer panes can be used to filter the table views with View | Injections or Transitions. Click on the checkbox under plot or table to include or exclude the injection or tansition from the view.

image

  • Changes to any of the input files can be made by reloading a modified .csv version of the file with File | Import File.
  • Run the workflow with Actions | Run workflow. Verify or change the data input/output directories before running the workflow.

image

  • The status of the workflow can be monitored with View | info. An estimated time is available. This value is only a rough estimation. It will be updated regaluary while the workflow is running. The progress bar however shows workflow steps completed. As some steps can be longer to execute, it may not reflect remaining time. More details are available about the items that are currently running.

image

  • Alternatively, a more detailed status can be obtained with View | log which will display the most recent SmartPeak log information.

image

  • After the workflow has finished, the results can be viewed in a tabular form as a large data table with View | features (table). The feature metavalues shown can be added or removed with View | Features and clicking on the checkboxes under plot or table. For performance reasons, the amount of data that one can view is limited to 5000 entries.
  • The results can be viewed in a graphical form as a line plot or as a heatmap with View | features (line).

image

or View | features (heatmap)

image

  • The underlying data can also be displayed as a table matrix with View | features (matrix). Samples, transitions, or feature metavalues can be included or excluded from any of the views using the explorer panes.

image

  • The results of calibration curve fitting can be inspected with View | Workflow settings | Quant Methods.

image

  • A detailed look at the calibration fitted model and selected points for the model can be seen with View | Calibrators.

image

  • For debugging problematic peaks, the raw chromatographic data and the picked and selected peaks can be viewed graphically with View | Chromatograms. For performance reasons, the amount of data that one can view is limited to 9000 points.

image

  • Export the results with Actions | Report. There is an option to choose the set of variables of interest

image

  • The results will be exported to PivotTable.csv in the same folder

image

The above applies for Mac and Linux.

smartpeak's People

Contributors

ahmedskhalil avatar bertrandboudaud avatar christopherabram avatar dmccloskey avatar m00dy avatar pcolaianni avatar sgalkina avatar smartpeak-ci 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

smartpeak's Issues

File browser view

Description

A file browser for choosing what files to load or save

Objectives

  • Launch of the Modal from the main menu
  • Modal view for selecting files on the users hard disk
  • Side panel for navigating the directory
  • Main table view for viewing file properties
  • Filter for file extensions
  • Search for file names

Tests

  • Working example

Threads for parallel processing of RawData

Description

<thread> and <future> can implemented to allow for parallel processing of RawData in a sequence.

Objectives

  • implement parallel processing of "sequence processing" and "sequence segment processing" pipelines
  • add a std::cout redirection to the OpenMS log ouptuts
  • add an option to set the number of threads per workflow

Validation

  • Unit tests passing
  • Check that cores are being invoked
  • Check for data race conditions and memory leaks

General long-term notes

I will collect info from multiple PRs into this issue:

  • we are using #pragma once instead of define guards
  • we keep using OpenMS:: namespace explicitly, avoiding using namespace OpenMS;
  • using namespace std; is fine where it actually increases readability
  • convert python to c++ first, and then take care of improving code
  • rename "Targeted" to "TargetedExperiment" for identifiers and methods in code
  • .cpp/.h C++ files should indented using two spaces
  • .cmake (or other cmake related files), build scripts, and docker files should be indented using tab/4 spaces
  • will need to correct EOF consistency

Data review method

Description

A method to alert the user to errors found in the data integrity check. The method should also present to the user a review of what components and samples will be analyzed so that the user can go back and correct any mistakes before running the workflow.

Objectives

  • list out components that will be analyzed
  • list out samples that will be analyzed (including their type)
  • list out samples and components with a calibration curve
  • list out components with a quantitation method
  • list out any discrepancies found in the Data integrity check

Validation

  • passing unit tests with examples of each of the objectives

On tagged unions

Generic documentation

Wikipedia: https://en.wikipedia.org/wiki/Tagged_union
cppreference.com (Union-like classes paragraph): https://en.cppreference.com/w/cpp/language/union

Issue

Suppose we have a union-like class defined as:

struct CastValue
{
  enum {
    FLOAT,
    INT,
    STRING,
  } tag;
  union
  {
    float f;
    int i;
    std::string s;
  };
};

If one tries to instantiate a variable of type CastValue as in:

CastValue c;

The compiler will complain:

error: use of deleted function ‘SmartPeak::Utilities::CastValue::CastValue()

and:

note: ‘SmartPeak::Utilities::CastValue::CastValue()’ is implicitly deleted because the default definition would be ill-formed

and more:

/home/pasdom/SmartPeak2/src/smartpeak/include/SmartPeak/core/Utilities.h:69:21: error: union member ‘SmartPeak::Utilities::CastValue::<unnamed union>::s’ with non-trivial ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
         std::string s;

What is happening

Usually we can take advantage of default constructors as in CastValue() = default;. In this case the compiler needs some help understanding how to construct the object:

  • what value tag should have
  • which union member should be initialized

I don't know if the issue is simply caused by one of the union's members having non-trivial constructors (std::string).

But what happens is that the compiler deletes the implicit constructors (and destructor) and forces us to define them.

Solution

Simply define the default constructor and destructor.

CastValue() : tag(UNKNOWN), s() {}
~CastValue() {}

Bonus

In case one tries to push_back() (vector) or insert() (map) a variable of this type into a container, a new long error will pop up:

In file included from /home/pasdom/local/include/c++/7.3.0/x86_64-pc-linux-gnu/bits/c++allocator.h:33:0,
                 from /home/pasdom/local/include/c++/7.3.0/bits/allocator.h:46,
                 from /home/pasdom/local/include/c++/7.3.0/string:41,
                 from /home/pasdom/OpenMS/src/openms/include/OpenMS/DATASTRUCTURES/String.h:41,
                 from /home/pasdom/OpenMS/src/openms/include/OpenMS/ANALYSIS/QUANTITATION/AbsoluteQuantitationMethod.h:38,
                 from /home/pasdom/SmartPeak2/src/smartpeak/source/io/OpenMSFile.cpp:3:
/home/pasdom/local/include/c++/7.3.0/ext/new_allocator.h: In instantiation of ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [wit
h _Up = std::pair<const std::__cxx11::basic_string<char>, SmartPeak::Utilities::CastValue>; _Args = {const std::__cxx11::basic_string<char, std::cha
r_traits<char>, std::allocator<char> >&, SmartPeak::Utilities::CastValue&}; _Tp = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char
>, SmartPeak::Utilities::CastValue> >]’:
/home/pasdom/local/include/c++/7.3.0/bits/alloc_traits.h:475:4:   required from ‘static void std::allocator_traits<std::allocator<_Tp> >::construct(
std::allocator_traits<std::allocator<_Tp> >::allocator_type&, _Up*, _Args&& ...) [with _Up = std::pair<const std::__cxx11::basic_string<char>, Smart
Peak::Utilities::CastValue>; _Args = {const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, SmartPeak::Utilities::
CastValue&}; _Tp = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, SmartPeak::Utilities::CastValue> >; std::allocator_traits<st
d::allocator<_Tp> >::allocator_type = std::allocator<std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, SmartPeak::Utilities::Cast
Value> > >]’
/home/pasdom/local/include/c++/7.3.0/bits/stl_tree.h:626:32:   required from ‘void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_cons
truct_node(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type, _Args&& ...) [with _Args = {const std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >&, SmartPeak::Utilities::CastValue&}; _Key = std::__cxx11::basic_string<char>; _Val = std::pair<const 
std::__cxx11::basic_string<char>, SmartPeak::Utilities::CastValue>; _KeyOfValue = std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, 
SmartPeak::Utilities::CastValue> >; _Compare = std::less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::b
asic_string<char>, SmartPeak::Utilities::CastValue> >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type = std::_Rb_tree_node<std
::pair<const std::__cxx11::basic_string<char>, SmartPeak::Utilities::CastValue> >*]’
/home/pasdom/local/include/c++/7.3.0/bits/stl_tree.h:643:21:   required from ‘std::_Rb_tree_node<_Val>* std::_Rb_tree<_Key, _Val, _KeyOfValue, _Comp
are, _Alloc>::_M_create_node(_Args&& ...) [with _Args = {const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, Sma
rtPeak::Utilities::CastValue&}; _Key = std::__cxx11::basic_string<char>; _Val = std::pair<const std::__cxx11::basic_string<char>, SmartPeak::Utiliti
es::CastValue>; _KeyOfValue = std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, SmartPeak::Utilities::CastValue> >; _Compare = std::
less<std::__cxx11::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, SmartPeak::Utilities::CastValue> 
>; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, Smart
Peak::Utilities::CastValue> >*]’

(cutting the error here; it's pages long)

Solution

A copy constructor is needed.

CastValue(const CastValue& other) {
  tag = other.tag;
  switch (other.tag) {
    case UNKNOWN:
    case STRING:
      s = other.s;
      break;
    case FLOAT:
      f = other.f;
      break;
    case INT:
      i = other.i;
      break;
  }
}

MRMFeatureValidation

Description

Conversion of MRMFeatureValidation from .py to .cpp. In addition, load_validationData from FileReaderOpenMS class will need to be implemented to read validation data from .csv. Please note that the functionality of load_validationData corresponding to accessing data from a database does not need to be implemented (i.e., db_json_i parameter can be ignored).

Objectives

  • re-implementation of all methods from MRMFeatureValidation
  • re-implementation of load_validationData without DB access functionality

Validation

  • converted and passing unit tests

CI

Objectives

  • Continuous integration using Jenkins and Dart
  • Unit testing using Boost.Test library
  • Continuous documentation building using Doxygen

Sequence manager tab view

Description

Table to manage the injection order and injection properties

Objectives

  • Ability to quickly view by sample, sample group, or sequence group
  • Ability to add or remove samples to or from sample groups or sample sequences
  • Ability to modify sample metadata (e.g., a radio button to change the sample_type attribute)
  • Drop down to add tags
  • Colored buttons to indicate labels and groupings with “x” to remove tags
  • Unit tests for internal logic

Validation

  • Passing unit tests
  • Working example

CircleCI integration

Description

As a developer, I would like to have checks for each pull request that SmartPeak builds on unix systems (linux/macOS), and also passes all unit tests

Objectives

  • CircleCI integration and notification on each PR
  • OpenMS and SmartPeak2 build integration
  • Unit test integration
  • Example test integration (?)

Validation

  • CircleCI check notification on each PR
  • Working build and run on develop

Data integrity check

Description

A method that inspects each of the user input data files for typos, naming inconsistencies, or missing files.

Objectives

  • ensure sample names are consistent across sequence and standardsConcentrations files
  • ensure component names are consistent across TraML ("transition_name"), featureFilter, featuerQC, quantitationMethod, and standardConcentrations files
  • ensure component name groups are consistent across TraML ("transition_group_id"), featureFilter, and featureQC files
  • ensure all filenames were found
  • ensure Heavy components match IS in standardConcentrations ("IS_component_name") and quantitationMethods ("IS_name") files ( FROM quant TO standards)

Validation

  • passing unit tests with examples for each of the objectives

Automated File conversion

Description

Seamless integration with pwiz msconvert to convert proprietary data files to .mzML.

Objectives

  • Nice to have Automated raw data upload from the instrument to a data store server (on site or in the cloud)
  • integration with msconvert from pwiz to convert files to .mzML

SequenceHandler tests

I'm having facing issues with SequenceProcessor tests, and I noticed that SequenceHandler tests are not implemented.

Better take care of this before continuing with SequenceProcessor.

Question on RawDataHandler's private members

@dmccloskey
What are these for?

OpenMS::MSExperiment msExperiment_;
OpenMS::MSExperiment chromatogram_map_;
OpenMS::TransformationDescription trafo_;
OpenMS::MSExperiment swath_;
std::map<std::string, float> validation_metrics_;

I noticed I'm not using them in the current implementation of the class.

Baseline correction methods for HPLC data

Description

Optionality for re-zeroing the baseline for HPLC data should be added to loadMzML method. If deemed necessary, the loadMzML method can also be refactored into smaller sub methods for easier testing.

Objectives

  • option to call the re-zeroing baseline methods for HPLC data
  • refactor of loadMzML into smaller sub-methods (only if necessary)

Validation

  • passing unit tests

Initial .cpp smartPeak repository

Description

Initial .cpp repository for smartPeak with CMake and other build files

Objectives

  • initial repository with folder structure
  • CMake files

Processed data reporting modal view

Description

A UI for configuring a report of the processed data using pre-built templates or a user specified template

Objectives

  • Selection of sample types to include in the report (as checkbox)
  • Selection of metadata to include in the report (as checkbox)
  • Option to export as a database table (FeatureSummary) or as a pivot table (SequenceSummary)
  • Unit tests for internal data handling methods

Tests

  • Passing unit tests
  • Validation

Jenkins integration

Description

As a user, I would like to have support on MacOS, Windows, and Linux

Objectives

  • Dedicated server from DTU and web domain
  • Scripts for CI with Jenkins for MacOS, Windows, and Linux

SmartPeak C++ optimizations

Description

A list of refactors and optimizations that can be made to the converted C++ smartPeak code base.

Optimizations

  • OpenMSFile::loadMSExperiment() needs to be discussed and eventually split into smaller functions that try solving fewer tasks.

    • Break into internal submethods loadMZML_, ExtractChromatograms_, MapChromatograms_
  • Refactor of CastValue code and generic structures

    • Move Utilities::CastValue to its own class files called DataStructures (i.e. CastValue instead of being in Utilities::CastValue). Implement extensive tests on it.
    • implement typedef for very-long types (e.g., parameters, etc)

Port of .py to .cpp

Description

Port of python implemented classes and workflows into C++ for seamless native integration and deployment

Objectives

  • port existing .py classes to C++ (modules for io, core, tests, and examples)
  • port .py algorithms to C++ (waiting on Svetlana)

Validation

  • working tests ported from .py
  • working examples ported from .py

Conversion of .py IO to .cpp IO

Description

Port of all python-based IO functions to cpp

Objects

  • conversion of FileReaderOpenMS and FileWriterOpenMS
  • sequenceReader and sequenceWriter
  • conversion of FileReader and FileWriter classes
  • conversion of tests

Generic table tab view

Description

The table widget provides users an in UI table editor used for updating parameters used for filtering, quantification, etc., on the fly without have to re-load .csv files

Objectives

  • Ability to sort by columns
  • Ability to search elements in a column
  • Ability to filter elements in a column
  • Ability to modify row text
  • Ability to add or delete a row
  • Unit testing of internal data handling methods

Feature list

  • Table layout of the data
  • Column filter/search/sort a la Excel
  • Popup that allows for element editing
  • Add/delete row button

Validation

  • Passing unit tests
  • Working example

Generic graphics tab view

Description

The graphics view allows users a dynamic plot to visualize the data

Objectives

  • Main frame for visualizing data
  • Search and filter elements to filter text based metadata
  • Sliders to filter continuous data
  • Multiple plot types
  • Zoom and pan
  • Tooltip of the plot data
  • Save and restore plot views
  • FilterManager class to handle saving and restoring data filtered states
  • Unit tests of internal data handling methods

Validation

  • Passing unit tests
  • Working example

Sequence explorer view

Description

Sequence explorer view provides a tree structure that allows users to navigate through the sequence and explore properties of each injection. The explorer also allows users to monitor and manage the data processing queue.

Objectives

  • Ability to view by sample, sample group, or sequence segment
  • Color code and/or graphic to indicate sample type
  • Color and progress bar to indicate sample, sequence segment, or sample group progress and status respectively
  • Tooltip for detailed information
  • Check box to include or exclude a sample, sequence segment, or sample group from the processing

Validation

  • Unit tests of internal methods
  • Working example

MetaDataHandler

Description

Conversion of the python dictionary representation of metadata into a full featured classes with attribute checks, etc.

Objectives

  • conversion from python dictionary to C++ class
  • transfer of unit tests from sequenceHandler class

Logging

Description

Formal record of all application events, messages, and warnings into a time-stamped document that can be used for debugging and audit trail purposes

Objectives

  • decide upon third party integration or creating a minimal version
  • add external logging to external build
  • add in application logging
    - [ ] add in features that comply with regulatory Audit Trail requirements

Requirements for the Event object

  1. Realtime output to the stream (control of the verbosity level)
  2. Realtime output to a text file (control of the text output level)
  3. Record of events in a vector that can then be searched or pushed to a database
  4. time stamps
  5. class that generated the "event"
  6. thread that generated the event

Requirements for the Logger object

  1. can log to file or output to screen at specified time intervals
  2. has multiple logging levels and a way to specify which levels to log to

References

Workflow "Wizard"

Description

Users currently experience constant problems checking that filenames are correct, the input .csv files are typo free (e.g., misspelling of sample or component names), and that sample or component names are consistent across all of the input .csv files. In addition, it is problematic and time-consuming to identify what files have a misspelling in them or what filenames are named incorrectly. A workflow "wizard" that reads in all files, checks for data integrity, and allows the user to review the found data before executing the workflow should resolve a majority of these problems.

Features

  • Data integrity check method
  • Data review method

Installation

Description

Native installation of smartPeak

Objectives

  • standalone .exe installation launcher for native platforms
  • standalone .exe that starts and runs SmartPeak for native platforms

User Session

Description

As a user, I would like to consolidate all .csv input and output files into a binary file format (session object) that can be loaded, saved, and queried. The session object should be able to be shared by users across multiple computers (with potentially different OSs). Note that the sesson object will not store the raw .mzML files, but instead will point to them using the Filenames class. The user will need to update the path of the raw .mzML file if they e.g., copy and paste the session to a new directory or computer. The session should allow for "undo" and "redo" functionality.

Requirements

  • Single binary file format
  • Multi-thread transaction support
  • transaction speed performance: TBD
  • disk IO: TBD
  • memory size limitations: TBD

Objectives

  • save application data to persistent storage (e.g., sqlite)
  • convert OpenMS structures to/from table structures
  • load and save sessions
  • session audit tracking
  • undo and redo session commands

Workflow manager tab/explorer view

Description

A UI that allows the user to specify the order and steps for processing samples in a sequence

Objectives

  • drop down that allows for selection of pre-configured processing steps
  • drop down that allows for adding RawDataProcessing steps
  • drop down that allows for adding SequenceSegmentProcessing steps
  • list that allows users to order the processing steps
  • button on the list items that allows the user to delete processing steps
  • unit tests of adding and removing workflow steps

Save for a later version

  • ability to save and load previous workflows
  • "workflow management" methods in SequenceProcessor to handle saving and loading workflows
  • "workflow management" methods in SequenceHandler to handle saving and loading workflows
  • unit tests for saving and loading workflows

Validation

  • passing unit tests
  • working example

Replication of data

Problem

The current python implementation duplicates a large amount of data between ...Handler classes. For example, quantitation_methods in SequenceSegmentHandler is duplicated across all RawDataHandler classes that belong to that Sequence segment. Consequently, it is easy for the RawDataHandlers to become "out of sync" with the SequenceSegmentHandlers and vice versa.

Potential strategies depending on the appropriate case

std::shared_ptrs could be used to share the address of the data between handlers. In this case, if one Handler were to update the data, the updated version would be accessible to all other handlers who are referenced to the same memory address.

Objectives

  • implement std::shared_ptr for member data that are referenced across multiple ...Handler classes
  • Apply to quantitation_method
  • Apply to metadata

Validation

  • all current unit tests pass
  • check that when one Handler is updated, another handler referencing the same data is also updated.

GUI

Description

As a user, I would like to have a Graphical user interface for SmartPeak that allows one to navigate the file system when importing files, view chromatograms and spectrum from data files, edit and modify settings and parameters, and view and edit data in an in-app table editor.

Workflow steps

  1. Import raw data and data upload validation
  2. Workflow/algorithm parameterization
  3. Workflow/algorithm execution, monitoring, and error reporting
  4. Data review
  5. Data reporting

Objectives

  • File IO routines
  • new session wizard
  • algorithm parameters, filters, and settings tabular editors
  • tabular data editor and viewer
  • graphical window for peak plots, QC plots, and analysis plots
  • sequence tag manager
  • sequence progress bar manager

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.