GithubHelp home page GithubHelp logo

schorschinho / osprey Goto Github PK

View Code? Open in Web Editor NEW
53.0 53.0 43.0 2.7 GB

All-in-one toolbox for processing of magnetic resonance spectroscopy data.

Home Page: https://schorschinho.github.io/osprey

License: MIT License

MATLAB 94.84% HTML 0.45% Makefile 0.05% C 4.56% CSS 0.08% R 0.02%
magnetic-resonance-spectroscopy matlab mrs mrshub neuroscience

osprey's People

Contributors

alexcraven avatar cjohnevans avatar cwdaviesjenkins avatar hjzollner avatar johnlamaster avatar markmikkelsen avatar meganaforbes avatar p-vs avatar raumhein avatar richardedden avatar schorschinho avatar shui5 avatar worldlypirate 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

osprey's Issues

[FEATURE REQUEST] HTML Style Report of Outputs

Is your feature request related to a problem? Please describe.
Depending on system it can sometime be difficult to open PDF files

Describe the solution you'd like
Almost all systems can leverage HTML files and HTML files can be easily ingested into neuroimaging data management software (such as LORIS)

Additional context
Embedding images within the HTML report would make distribution to collaborators very seamless.

[BUG] Large number of TWIX datasets causes memory issue

A large number of TWIX datasets can cause the memory to overflow and produce an "out of memory" error.

This is because osp_LoadTwix gets all the raw (individual coil) data from all datasets first, and then osp_combineCoils combines them one after another.

Resolution: We have to shift the coil-combination procedure (including the deletion of the individual coil elements from memory) one 'hierarchy level' further down, ie into the osp_LoadTwix function, to free up memory after loading and coil-combining each dataset.

[FEATURE REQUEST] - Create csv file for excluded subjects

Is your feature request related to a problem? Please describe.
Easy identification of subjects that are removed/flagged as bad in the GUI.

Describe the solution you'd like
Add excluded subjects to the csv file with subject names for easier identification

Additional context
Feature request by Eric Porges.

[BUG] - Coreg/Seg crash

Describe the bug
Coreg/Seg window in the GUI crashes in Matlab R2021a and newer

Computer configuration (please complete the following information):

  • MATLAB version 2021a and newer

Additional context
Multiple reports.

[BUG] - OspreyGUI crash - onFit/onCoreg - Lewis Crawford

Describe the bug
OspreyGUI crashes when Model or Coreg button is clicked.

Expected behavior
Should run through.

Screenshots
See MRSHub.org
https://forum.mrshub.org/t/error-launching-model-data-and-coregister-in-osprey-gui/859

Additional context
I think this is related to having the pause on error function turned on in MATLAB. Usually, the click on Model and Coreg leads to yellow warnings (still an error) in MATLAB which isn't crashing the GUI.

[FEATURE REQUEST] Rename Ins and Scyllo

Is your feature request related to a problem? Please describe.
From @richardedden: Change the default abbreviations for the inositols (currently Ins and Scyllo).

Describe the solution you'd like
Use mI and sI instead of Ins and Scyllo.

[BUG] Example JobFiles

Describe the bug
Typos in the jobfiles included in the example folder. Not all processing options included and accurately described.

Expected behavior
A clear and concise description should be included in the example jobfiles.

Question: Is this an error?

On lines 304 and 670 of the fit_OspreyPrelimStep2.m file, when converting back to the time domain the ifft is used in conjunction with the fftshift, as shown below. Is this an error or is it supposed to use the fftshift instead of the ifftshift? If it is not an error, can you please explain why?

`resBasisSet.specs = fftshift(fft(resBasisSet.fids,[],1),1);

% Run the frequency-domain operations on the basis functions
% (first order phase correction)
% Cut out the frequency range of the basis set
resBasisSet = op_freqrange(resBasisSet,fitRangePPM(1),fitRangePPM(end),length(splineArray(:,1,1)));
% Create a ppm vector around a pivot point (water)
ppm_ax = resBasisSet.ppm;
pivotPoint = 4.68;
multiplier = ppm_ax - pivotPoint;
% Apply the linear phase correction
for ii=1:nBasisFcts
resBasisSet.specs(:,ii) = resBasisSet.specs(:,ii) .* exp(1iph1multiplier);
end
resBasisSet.fids = ifft(fftshift(resBasisSet.specs,1),[],1);`

Best regards,
John

https://github.com/schorschinho/osprey/blob/90cc9caa7493784b2e5de5b7b782a987ad1ced03/libraries/FID-A/fitTools/fitModels/Osprey/fit_OspreyPrelimStep2.m

[FEATURE REQUEST] Matlab compiled standalone version that does not require a matlab license

Is your feature request related to a problem? Please describe.
Matlab license unavailable.

Describe the solution you'd like
A compiled version of osprey that runs with the matlab runtime environment and does not require a Matlab license

Describe alternatives you've considered
running in Octave?

Additional context
In our open-source project http://neurodesk.github.io/ we provide reproducible access to neuroimaging tools, but we do not have a Matlab license. We provide access to tools like SPM via the matlab runtime environment and it would be wonderful to provide open access to Osprey as well.

[FEATURE REQUEST] Containerization of Pipeline

Is your feature request related to a problem? Please describe.
Not all systems come with MATLAB licenses and at times can be difficult to obtain. To lower the barrier of entry and make osprey capable of running on systems without MATLAB, containerization is suggested.

Describe the solution you'd like
I would like the application, along with its dependencies wrapped into a container for ease of use. Specifically, MATLAB Compiler Runtime will likely need to be deployed for the containerized application to run as expected.

[BUG] Error when calling Quantify in the GUI

Reference to non-existent field 'CorrNames'.

Error in OspreyGUI/osp_iniOverviewWindow (line 1479)
                                               'String',gui.CorrNames, 'Value', 1,'callback',{@pop_corrOvCorr_Call});

Error in OspreyGUI/onQuant (line 1850)
    osp_iniOverviewWindow();
 
Error while evaluating UIControl Callback.

bug: saveJMRUI and savejMRUI

Dear,

I an attempt to compare the Osprey fitting results with those from jMRUI for my data, I found a bug in your code.

In the job .m example files and in the ‘OspreyJob.m’ file, you use the opts.saveJMRUI tag. However in, the MRSCont.mat data structure and in the ‘OspreyGUI.m’ files, you use the opts.savejMRUI tag. Since savejMRUI and saveJMRUI are different parameters in Matlab, Osprey never writes the requested jMRUI files. If I change it in the job .m example files and the ‘OspreyJob.m’ file to savejMRUI, it works fine.

Kind regards,
Dr. Peter Van Schuerbeek

[BUG] Error during PDF creation during OspreyFit outside GUI

Describe the bug

When running the OspreyFit function from the terminal with the 'savePDF` flag set the following errors result when figures are being created:

Error 1

Reference to non-existent field 'diff1'.

Error in osp_plotModule (line 333)
                        ' ppm\nNumber of metabolites: '
                        num2str(MRSCont.fit.resBasisSet.(which){1,MRSCont.info.A.unique_ndatapoint_indsort(kk)}.nMets)
                        '; Number of macro moclecules: '
                        num2str(MRSCont.fit.resBasisSet.(which){1,MRSCont.info.A.unique_ndatapoint_indsort(kk)}.nMM)
                        ...

Error in osp_plotAllPDF (line 86)
                    osp_plotModule(MRSCont, 'OspreyFit', kk, Names{ss});

Error in OspreyFit (line 215)
    osp_plotAllPDF(MRSCont, 'OspreyFit')

Modifying the relevant line (333) in ops_plotModule.m from

' ppm\nNumber of metabolites: ' num2str(MRSCont.fit.resBasisSet.(which){1,MRSCont.info.A.unique_ndatapoint_indsort(kk)}.nMets) '; Number of macro moclecules: ' num2str(MRSCont.fit.resBasisSet.(which){1,MRSCont.info.A.unique_ndatapoint_indsort(kk)}.nMM) ...

to

 ' ppm\nNumber of metabolites: ' num2str(MRSCont.fit.resBasisSet.conc{1,MRSCont.info.A.unique_ndatapoint_indsort(kk)}.nMets) '; Number of macro moclecules: ' num2str(MRSCont.fit.resBasisSet.conc{1,MRSCont.info.A.unique_ndatapoint_indsort(kk)}.nMM) ...

appears to resolve the issue and I think retains the intended function.

Error 2

Not enough input arguments.

Error in osp_plotFit (line 56)
            figTitle = sprintf([fitMethod ' ' fitStyle ' ' conc ' fit plot:\n' filen
            ext]);

Error in osp_plotModule (line 419)
            temp = osp_plotFit(MRSCont, kk,Style,which);

Error in osp_plotAllPDF (line 86)
                    osp_plotModule(MRSCont, 'OspreyFit', kk, Names{ss});

Error in OspreyFit (line 215)
    osp_plotAllPDF(MRSCont, 'OspreyFit')

Modifying the relevant line in osp_plotFit.m from

figTitle = sprintf([fitMethod ' ' fitStyle ' ' conc ' fit plot:\n' filen ext]);

to

figTitle = sprintf([fitMethod ' ' fitStyle ]);

resolves the issue. It's not clear if any functionality is lost.

Computer configuration (please complete the following information):

  • OS: Ubuntu 18.04
  • MATLAB version: 2020b

[BUG] Error message when "Cancel" is being pressed in the "Load job file" GUI window

This error message occurs when the "Load job file" window in OspreyStartUp is closed without selecting a job:

Brace indexing is not supported for variables of this type.

Error in OspreyStartUp/loadJob (line 110)
    gui.data.MRSCont = OspreyJob(gui.out{1});

Error in OspreyStartUp/onLoadJob (line 125)
    loadJob();
 
Error while evaluating UIControl Callback.

Import Siemens XA (31) data

Is your feature request related to a problem? Please describe.
Spectro data from the new Siemens environemnt (in our case XA 31) can't be loaded.

I am new to Spectroscopy so maybe I am missing some basic things ?!
However, when trying to load a spectrum (*.dat) from our new Siemens Vida (using XA 31), this error message is prompted (see below).

I was able to load the data with another software package (fsl mrs, spec2nii) - just for your info.

I would really appreciate your help and can of course provide the data if necessary.
Best, Karl

Loading raw data from dataset 1 out of 1 total datasets...
Software version: VD (!?)
Reader version: 1496740353 (UTC: 06-Jun-2017 09:12:33)
Scan 1/2, read all mdhs:
97.7 MB read in 2 s
Scan 2/2, read all mdhs:
93.9 MB read in 1 s

ans =

 0

multi RAID file detected.
Reference to non-existent field 'Frequency'.

Error in io_loadspec_twix (line 474)
txfrq=twix_obj.hdr.Meas.Frequency;

Error in osp_LoadTwix (line 66)
raw = io_loadspec_twix(MRSCont.files{metab_ll,kk});

Error in OspreyLoad (line 181)
[MRSCont] = osp_LoadTwix(MRSCont);

Error in osp_onLoad (line 34)
MRSCont = OspreyLoad(MRSCont);

Error while evaluating UIControl Callback.

[FEATURE REQUEST] BIDS Style Derivative Outputs

Is your feature request related to a problem? Please describe.
Even though there is no accepted BIDS derivative format for MRS, many of the files outputted actually can be changed to meet the BIDS derivative format.

Describe the solution you'd like
Perhaps having a flag which will output all of the pipeline derivatives in a BIDS derivative format.
Specifically:

  • The tabulated data produced per session could emulate the BIDS style suggested for phenotypic and assessment data
  • The NIFTI or imaging data like the masks or anatomical images could be renamed slightly.

[BUG] Gunzipped file problem in osp_plotCoreg

Describe the bug
When generating PDFs from the OspreyCoreg command, the following error occurs:

Error using spm_slice_vol
Cant open image file.

Error in voxel2world_space (line 32)
img_t = spm_slice_vol(V,TM,TD,2)';

Error in osp_plotCoreg (line 76)
[mask_t,mask_c,mask_s] = voxel2world_space(Vmask,voxel_ctr);

Error in osp_plotModule (line 464)
                osp_plotCoreg(MRSCont, kk);

Error in osp_plotAllPDF (line 91)
              osp_plotModule(MRSCont, 'OspreyCoreg', kk);

Error in OspreyCoreg (line 193)
    osp_plotAllPDF(MRSCont, 'OspreyCoreg')

The ultimate issue appears to be in osp_plotCoreg. Here, the voxel mask must be converted from a .nii.gz file to .nii in order to be read by spm_slice_vol. This is done successfully at lines 59 and 60:

Vmask=spm_vol(MRSCont.coreg.vol_mask{kk}{VoxelIndex}.fname);    
voxel_ctr = MRSCont.coreg.voxel_ctr{kk}(:,:,VoxelIndex); 

The following lines (63-70)

if ~MRSCont.flags.didSeg
     if exist([MRSCont.coreg.vol_mask{kk}.fname, '.gz'],'file')
         delete(MRSCont.coreg.vol_mask{kk}.fname);
     end
     if exist([MRSCont.coreg.vol_image{kk}.fname, '.gz'],'file')
         delete(MRSCont.coreg.vol_image{kk}.fname);
     end
end

then seem to delete the newly created .nii files before the plotting steps are run. Since the .nii file is missing, there is nothing for spm_slice_vol to read and the error results.

Moving this block of code to the end of osp_plotCoreg solves this issue and seems to retain the desired functionality (i.e., the .nii file is deleted to leave just the .nii.gz mask file.

Computer configuration (please complete the following information):

  • OS: Ubuntu 18.04
  • MATLAB version: 2020b

[FEATURE REQUEST] Support for CMRR STEAM DICOM data

Is your feature request related to a problem? Please describe.
I am trying to load DICOM data obtained with a 7T STEAM sequence from the CMRR group, but there is an error in read_dcm_header.

Describe the solution you'd like
I would like to be able to load this data.

Additional context
Request by Aimie Peek.

[BUG] - Siemens Twix svs_se Connectom scanner loading error - MRSHub report

Describe the bug
Osprey crashes during OspreyLoad for Siemens TWIX PRESS data acquired on Connectom Scanner with VD software version

To Reproduce
Steps to reproduce the behavior:
Call OspreyLoad with described data

Expected behavior
Load data into MRSContainer for further processing.

Additional context
Reported by Carolyn McNabb on MRSHub.

[BUG] Fitting unedited data with fit style 'Concatenated' throws an error when creating the GUI output.

This error message occurs because the fit style 'Concatenated' is not available for unedited data. Needs to be intercepted.

Reference to non-existent field 'conc'.

Error in OspreyGUI/osp_iniFitWindow (line 1031)
                RawAmpl = MRSCont.fit.results.(gui.fitStyle).fitParams{1,gui.SelectedDataset}.ampl .*
                MRSCont.fit.scale{gui.SelectedDataset};

Error in OspreyGUI/onFit (line 1758)
    osp_iniFitWindow();
 
Error while evaluating UIControl Callback.

[FEATURE REQUEST] Add option to provide external segmentation maps

Is your feature request related to a problem? Please describe.
Osprey currently calls SPM to perform segmentation of structural anatomical images, but there is no way to provide pre-segmented tissue class maps instead (e.g. produced by deep-learning methods specifically designed for certain cohorts).

Describe the solution you'd like
Add fields to the job file that provide a pathway for supplying pre-segmented tissue class maps.

[BUG] Error during PDF creation outside GUI

Describe the bug
When running an analysis using individual commands rather than the GUI an error occurs during the creation of figure PDFs. For example, when running OspreyLoad:

Reference to non-existent field 'Load'.

Error in osp_plotModule (line 87)
            Title = [MRSCont.ver.Osp ' ' MRSCont.ver.Load];

Error in osp_plotAllPDF (line 37)
                osp_plotModule(MRSCont, 'OspreyLoad', kk, 'mets');

Error in OspreyLoad (line 141)
    osp_plotAllPDF(MRSCont, 'OspreyLoad')

Error in osp_onLoad (line 32)
    MRSCont = OspreyLoad(MRSCont);
 
Error while evaluating UIControl Callback.

This happens with all commands, not just OspreyLoad.

The issue is resolved by changing the relevant line in osp_plotModule.m from

Title = [MRSCont.ver.Osp ' ' MRSCont.ver.Load];

to

Title = [MRSCont.ver.Osp ' Load'];

Equivalent changes in the relevant lines for OspreyProcess, OspreyFit, etc, resolve the issue for them also. However, I'm not sure if this change removes some intended functionality.

Computer configuration:

  • OS: Ubuntu 18.04
  • MATLAB version 2020b

Some suggestion

Dear Georg and al.,

I used your software all the day. It works like charm.
Thanks for this valuable work.

I just have some suggestion to improve it:

  1. In the CSV result, it could be great to add the name of the subject as another variable.
  2. In addition to the 'Raincloud plot tools', it could be great to have all the spectrum and the results generate in pdf; easier way to visualize the data (like in Tarquin or LCModel).
  3. Where is it possible to find the quality-control data from each spectra (in .csv, or other format)?

If I can help you, let me know.
Thanks once again,

Frederic

[BUG]

SplineArray dimension calculation Error

HERCULES fit with LCmodel and seperate style

For default fitting range the dimension of the spline array and the reduced data/basis set range can disagree.
Possible Error in fit_makeSplineBasis line 99
splineInnerBasisFunctionMatrix(:,rr,:) = splineBasisFunctionMatrix(knotLocations(3):1:knotLocations(end-2),rr,:);
Maybe due to a wrong knot location resulting from dkntmn.

Changing Fit Range somehow bypasses this Problem.

Some questions and possible bugs

Dear Dr. Oeltzschner and al.,

I am fairly new to MRS, but your software has been of great help for me lately as I started processing data for one of my graduate projects. So far I have worked with Siemens TWIX, DICOM and RDA file formats. Everything has worked very nicely (especially for TWIX data) and I look forward to continue using your software. Below is a list of questions I have, and possible bugs that I have encountered - I'm not sure if this is the best forum for this, so if I need to post somewhere else please do let me know.

  1. I noticed that after the latest update, the 'Processed' tab in the GUI is grayed out when loading a MRSCont.mat file.
  2. When saving pdfs of the 'Cor/Seg' tab, the voxel and voxel fraction information does not show up in the pdf. Will this information show if this specific module is plotted independently? Does it need to be saved as a png or jpeg instead?
  3. I used the generated RDA files for fitting and quantification with LCModel and noticed that a lot of the header information is missing, i.e., patient id, sequence description, etc.. This doesn't interfere with the fitting or quantification, but some of title information has to be entered manually.
  4. I tried using the LCModel control files in the output folder and kept getting errors. Is there something I need to change within the control file? Like the paths?
  5. Lastly, is there a feature to import existing LCModel basis sets into Osprey format? I would like to compare some of the fitting and quantification results using Osprey and LCModel for the sLASER sequence.

Thank you and I appreciate any answer you could provide.

-Humberto M.

[FEATURE REQUEST] - GE HERMES/HERCULES Loader

Is your feature request related to a problem? Please describe.
I want to process GE HERMES/HERCULES data in Osprey

Describe the solution you'd like
Implement GE HERMES/HERCULES loader into Osprey

Additional context
Impossible to load GE HERMES/HERCULES data from HBCD collaborators.

[FEATURE REQUEST] - jason based job file - OspreyJob - Helge

Is your feature request related to a problem? Please describe.
Introduce .jason based jobfile definition in addition to .csv and .m files.

Describe the solution you'd like
See above

Additional context
Needed for HBCD and LORIS integration of Osprey

[FEATURE REQUEST] - TWIX loader for fMRI/fMRS sequence

Is your feature request related to a problem? Please describe.
Update OspreyLoad to accept a Siemens combined fMRI/fMRS sequence

Describe alternatives you've considered
FID-A loader.

Additional context
Feature request from Jilly Naaijen (Donders Institute Nijmegen).

Plotting the fitting results

Hi!

Up to recently I used Osprey v1.1.0, but decided to switch to the most recent version now. However, the plotting functions do not work with the same arguments any more as they did in the version I used previously. I used to use them as follows to visualise the metabolite data:
osp_plotLoad(data_container, num_of_dataset, 'mets')
osp_plotProcess(data_container, num_of_dataset, 'A')
osp_plotFit(data_container, num_of_dataset, 'off');

osp_plotload still works as previously.
osp_plotProcess now seems to have 'metab' instead of 'A' as the 3rd argument.
ops_plotFit - 'off' as the 3rd argument does not work any more. Neither does 'mets' or 'metab'. How should this function be called?

SInce I am using the calls inside another script, switching to the GUI is not an option.

Thanks,
Maarika

[BUG] - OspreyFit crash - OspreyFit - Yulu Song

Describe the bug
Osprey crashes during the OspreyFit call, because of a missing field in the struct. This is most likely related to the renaming during the last major update.

To Reproduce
Steps to reproduce the behavior:
Run OspreyFit on a dataset that already had results in the derivatives folder.

Expected behavior
Run OspreyFit without crashing.

[BUG]

Describe the bug
Receive a "File does not exist" error while trying to load multiple RDAs into one jobfile using the GUI.

To Reproduce
Steps to reproduce the behavior:

  1. Select more than one RDA file for loading into the jobfile
  2. Complete the jobfile as normal and execute it.

Expected behavior
Jobfile should execute as normal.

Screenshots

Osprey
Timestamp October 13, 2021 13:40:33 Osprey 1.1.0 OspreyGUI
Item generic: No field(s) named
frames
Item generic: No field(s) named
frames
Item generic: No field(s) named
frames
Fitting style was changed to Separate, because this is unedited data. Please indicate otherwise in the csv-file or the GUI
/Users/edm9fd/Documents/CARES/mrs/front/Osprey_FRONT_131021.m
Timestamp October 13, 2021 13:41:19 Osprey 1.1.0
Timestamp October 13, 2021 13:41:19 Osprey 1.1.0 OspreyGUI
Error using osp_detDataType (line 90)
Error during loading. File or folder /Users/edm9fd/Documents/CARES/mrs/front/rda/006-M_front.rda does not exist. Check
the job file!

Error in OspreyGUI (line 414)
[~, ~] = osp_detDataType(MRSCont);

Error in CreateOspreyJob_app/CREATEJOBButtonPushed (line 509)
OspreyGUI(MRSCont);

Error using matlab.ui.control.internal.controller.ComponentController/executeUserCallback (line 386)
Error while evaluating DestroyedObject PrivateButtonPushedFcn.

Computer configuration (please complete the following information):

  • OS: Mac OS 11.6 Big Sur
  • Version - Latest pull from Git: Today
  • MATLAB version [e.g. 2018a]: 2020b

Additional context
When I create a jobfile for each file separately, the GUI is able to read in the files correctly. In the error message, there appears to be an extra space in the filename when setting up for a batch process.

[BUG] SPM error message when starting GUI

If the SPM and Osprey folders are not in the same (MATLAB) folder, an error is being thrown when the GUI is initialized (when OspreyGUI is called after OspreyStartUp has been run and a job file has been selected).

[FEATURE REQUEST] Support for un-edited multi-file RDA data

Is your feature request related to a problem? Please describe.
Multi-file RDA is supported for MEGA, but not conventional sequences.

Describe the solution you'd like
I would like to have support to load un-edited data with multiple RDA files.

Additional context
Feature request by Hossein Mohammadi.

[BUG] - Keydown press crashes - OspreyGUI - Yulu Song

Describe the bug
The listbox in the GUI crashes when up/down is pressed for the first/last entry.

Expected behavior
Jump to first or last entry in the list.

Additional context
Introduced during the last update.

[FEATURE REQUEST] - Add support for MGH STEAM - io_loadspec_twix - @schorschinho

Is your feature request related to a problem? Please describe.
Osprey mis-recognizes STEAM data collected with the MGH sequence (Dr. Ratai).

Describe the solution you'd like
Modify io_loadspec_twix to properly recognize this sequence.
(Also add an appropriate basis set.)

Additional context
(Submitted via e-mail by Ewa Beldzik)

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.