GithubHelp home page GithubHelp logo

gem-cms-fm's People

Contributors

jotadram6 avatar jsturdy avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

jotadram6 jsturdy

gem-cms-fm's Issues

Parameters for Start/Enable

Brief summary of issue

Summary of parameters needed by different applications during the Start/Enable(/Resume) command

GEM applications

  • None

TCDS applications

ICIController

  • xsd:unsignedInt runNumber (not for resume)

PIController

  • xsd:unsignedInt runNumber (not for resume)

LPMController

  • xsd:unsignedInt runNumber (not for resume)

uFEDKIT applications

EVM

  • None

BU

  • None

FerolController

  • None

Always catch crashed applications

Brief summary of issue

FM was not able to reconfigure because xDAQ resources had crashed

Types of issue

  • Bug report (report an issue with the code)

Expected Behavior

If a managed resource dies, the FM should know about it, and either put the resource into ERROR, and/or put itself into ERROR

Masking resources

Brief summary of issue

When the GEMSupervisor application is managing the GEM resources, the FM should not send any state transition messages to them.

Types of issue

  • Bug report (report an issue with the code)

Expected Behavior

When sending any state transition command, the GEMSupervisor should be the one sending the command to the managed applications.

Current Behavior

Managed applications are receiving state transition commands twice, resulting in errors

Possible Solution (for bugs)

Utilize the application masking features of rcms to mask and ignore these applications

  • Can do this only when we find a GEMSupervisor in the config
  • Can have a list of such applications that will be ignored/masked

Order of operations for state transitions

Brief summary of issue (work in progress...)

Certain applications require a proper sequence of operations

  1. GEM applications (GEMSupervisor/hardware managers/etc.)
  2. TCDS applications (LPMController/ICIController/PIController)
  3. uFEDKIT applications (EVM/BU/FerolController`)

Initialize

Only GEM applications are currently set up to expect this, and at the moment the order doesn't matter, though a future could be envisioned where

  • GEMSupervisor is first
  • AMC13Manager is next (or)
  • in conjunction with the AMCManager
  • OptoHybridManager is next

Halt/Stop/Pause

These all can share a similar ordering, as when running, we want to stop the thing furthest from our system first, e.g., TCDS, then move closer

  • TCDS should be Halted when GEM applications are Initialized

Configure

Need to configure TCDS first, to ensure that clocks are coming

Start/Resume/Enable

Start applications closest to our system first, and then move away, e.g., TCDS should be last to start

  • For uFEDKIT operations, the EVM must be enabled before the BU (but after an RU and TA, if present)

Reset

Probably quite similar to Halt would be sufficient

Certain FM errors do *not* trigger the FM to error

Brief summary of issue

In certain cases (failure to send run number to GEMSupervisor or tcds applications) the FM will continue to Running while the application it was trying to start will be in Running without a valid run number (GEMSupervisor) or Configured (tcds` applications)

Types of issue

  • Bug report (report an issue with the code)

Expected Behavior

  • If an error occurs in the FM the FM should go to Error state
  • Child resources may be happy to continue as they may have defined default behaviour, but might also consider forcing the children back to the previous stable state

Current Behavior

This also indicates that the composite state vector in the FM is not actually working as it should

Screenshots

bad-update-status

  • In this case several things happened:
    • The FM failed to send the RunNumber to the GEMSupervisor, but the GEMSupervisor is happy to utilize the default run number --- whether this is an acceptable behaviour or not can be discussed elsewhere
    • The commands to tcds failed due to a missing required parameter, i.e., runNumber, so they stayed in Configured
    • The result is that the FM went into Running
    • Issues:
    • The FM state should be Configured or Starting based on the composite states
    • The FM state should really be Error or Failed because of the aforementioned failures

Parameters for Stop/Disable

Brief summary of issue

Summary of parameters needed by different applications during the Stop/Disable(/Pause) command

GEM applications

  • None

TCDS applications

ICIController

  • None

PIController

  • None

LPMController

  • None

uFEDKIT applications

EVM

  • None

BU

  • None

FerolController

  • None

Run keys

Brief summary of issue

Having run keys to select between different types of operational modes

Types of issue

  • Feature request (request for change which adds functionality)

Current Behavior

Currently, a change in the configuration is necessary to change the run type, or TCDS key

Possible Solution (for bugs)

Nice to have this both in miniDAQ mode and standalone FM mode (or we just build our own miniDAQ like interface for the standalone FM to be used on teststands

  • Dropdown menu for run type
    • Scan mode (latency, threshold, s-curve...?)
    • Normal mode
  • Option for selecting between local+lpm and parasitic+cpm
  • Option to select adding in ferol and readout resources

Use the offical RCMS GitLab project and the supported gradle build system

Brief summary of issue

The newer version of RCMS and the function managers are now being developed in the official RCMS GitLab project. Moreover, the build system moved from ant(?) to gradle with possibilities of continuous integration.

We should follow the changes to get full support and compatibility. The changes required for porting from ant to gradle are really small. We need to ask to get our own repository under cms-rcms/funcionmanagers though. Who should we contact?

Types of issue

  • Bug report (report an issue with the code)
  • Feature request (request for change which adds functionality)

Expected Behavior

Be hosted on the central RCMS project and use a supported build system.

Current Behavior

Hosted on GitHub and use an unsupported build system.

Context (for feature requests)

Moving to the future (or the present :-)

Send necessary parameters for any state transition

Brief summary of issue

Certain commands require that some parameters be sent
The way to do this in the rcms world is through the usage of CommandParameter objects

Types of issue

  • Feature request (request for change which adds functionality)

Expected Behavior

Sending any command will result in the transition being interpreted.

Current Behavior

Sending, e.g., Configure results in the following error message:

2017-08-18 12:02:11 and 288 ms : rcms.gem904.daq.rcms.fm.app.gemfm.GEMEventHandler
      INFO Executing configureAction
 2017-08-18 12:02:11 and 289 ms : rcms.gem904.daq.rcms.fm.app.gemfm.GEMEventHandler
     ERROR configureAction: error reading command parameters of Configure command.
 2017-08-18 12:02:11 and 331 ms : rcms.gem904.daq.rcms.fm.app.gemfm.GEMEventHandler
      WARN class rcms.fm.app.gemfm.GEMFunctionManager: Failed to send error mesage configureAction: error reading command parameters of Configure command.

Your Environment

  • Java version used: Java(TM) SE Runtime Environment (build 1.8.0_131-b11)

Parameters for Configure

Brief summary of issue

Summary of parameters needed by different applications during the Configure command

GEM applications

  • None

TCDS applications

ICIController

  • xsd:string xdaq:hardwareConfigurationString
  • xsd:string fedEnableMask (optional)

PIController

  • xsd:string xdaq:hardwareConfigurationString
  • xsd:boolean xdaq:usePrimaryTCDS
  • xsd:string fedEnableMask (optional)

LPMController

  • xsd:string xdaq:hardwareConfigurationString
  • xsd:string fedEnableMask

uFEDKIT applications

EVM

  • None

BU

  • None

FerolController

  • None

Problem starting GEM FM

cDAQ had a problem starting the GEM FM
It looks like something crashed during the standard process:

WARN [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::processNotice(): Received an unexpected StateNotification while taskSequence is nullStateUpdate 
Destination = null 
Identifier = http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=254 
fromState = null 
reason = GEM global state changed: (gem::hw::glib::GLIBManager:0) : GEMFSMApplication::halt Firing 'IsHalted' into the FSM (gem::hw::optohybrid::OptoHybridManager:0) : GEMFSMApplication::halt Firing 'IsHalted' into the FSM (gem::hw::amc13::AMC13Manager:3) : GEMFSMApplication::halt Firing 'IsHalted' into the FSM (tcds::ici::ICIController:0) : (tcds::pi::PIController:0) : 
toState = Halted 
2018-05-20 07:58:07 and 919 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM] GEMFunctionManager::getConfSequence(): got fedMask 1467&3% from the supervisor 
2018-05-20 07:58:07 and 920 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM] GEMFunctionManager::getConfSequence(): sending FEDEnableMask to the supervisor 
2018-05-20 07:58:07 and 966 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM] GEMFunctionManager::getConfSequence(): sent FEDEnableMask to the supervisor 
2018-05-20 07:58:07 and 966 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM] GEMFunctionManager::getConfSequence(): returning confTaskSeq 
2018-05-20 07:58:07 and 966 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::executeTaskSequence(): Starting execution of TaskSequence: 1.0 
2018-05-20 07:58:08 and 14 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::executeTaskSequence(): After m_taskSequence.startExecution(): 0.0 
2018-05-20 07:58:08 and 14 ms : cms.gempro.rcms.fm.app.gemfm.GEMEventHandler 
INFO configureAction Executed 
2018-05-20 07:58:31 and 883 ms : cms.gempro.rcms.fm.app.gemfm.GEMEventHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMEventHandler::configureAction(): Received Configure state notification 
2018-05-20 07:58:31 and 884 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::processNotice(): current state is: Configuring, processing state notification: rcms.stateFormat.StateNotification@465d9a39, taskSequence: rcms.utilities.fm.task.TaskSequence@2fb25e4f, activeTask: null 
2018-05-20 07:58:31 and 884 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::processNotice(): rcms.stateFormat.StateNotification@465d9a39 
2018-05-20 07:58:31 and 884 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::processNotice(): Unknown signal 139 
2018-05-20 07:58:31 and 884 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::processNotice(): Unknown signal 139 
2018-05-20 07:58:31 and 885 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
WARN [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::processNotice(): TaskSequence is empty, tasks may have completed 
2018-05-20 07:58:31 and 885 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::completeTransition(): Fire TaskSequence::getCompletionEvent SetConfigured 
2018-05-20 07:58:31 and 885 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::processNotice(): current state is: Configuring, processing state notification: rcms.stateFormat.StateNotification@465d9a39, taskSequence: null, activeTask: null 
2018-05-20 07:58:31 and 885 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::processNotice(): rcms.stateFormat.StateNotification@465d9a39 
2018-05-20 07:58:31 and 885 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::processNotice(): Unknown signal 139 
2018-05-20 07:58:31 and 885 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::processNotice(): Unknown signal 139 
2018-05-20 07:58:31 and 885 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
WARN [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::processNotice(): Received an unexpected StateNotification while taskSequence is nullStateUpdate 
Destination = null 
Identifier = http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=0 
fromState = null 
reason = Unknown signal 139 
toState = Crashed 
2018-05-20 08:06:45 and 569 ms : cms.gempro.rcms.fm.app.gemfm.GEMEventHandler 
INFO Executing startAction 
2018-05-20 08:06:45 and 570 ms : cms.gempro.rcms.fm.app.gemfm.GEMEventHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMEventHandler::startAction(): getting the run number 
2018-05-20 08:06:45 and 570 ms : cms.gempro.rcms.fm.app.gemfm.GEMEventHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMEventHandler::startAction(): updating the the started-with run number 
2018-05-20 08:06:45 and 570 ms : cms.gempro.rcms.fm.app.gemfm.GEMEventHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMEventHandler::startAction(): updating the run number 
2018-05-20 08:06:45 and 570 ms : cms.gempro.rcms.fm.app.gemfm.GEMEventHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMEventHandler::startAction(): runNumber is 316610 
2018-05-20 08:06:45 and 588 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
ERROR [GEM FM] GEMFunctionManager::getStartSequence(): Error! XDAQException when trying to send the FEDEnableMask to the GEM supervisor 
2018-05-20 08:06:45 and 619 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM] GEMFunctionManager::getStartSequence(): returning startTaskSeq 
2018-05-20 08:06:45 and 619 ms : cms.gempro.rcms.fm.app.gemfm.GEMStateNotificationHandler 
INFO [GEM FM::GEMFM_global_cc7] GEMStateNotificationHandler::executeTaskSequence(): Starting execution of TaskSequence: 1.0 
2018-05-20 08:06:45 and 628 ms : cms.gempro.rcms.fm.resource.QualifiedResourceContainer 
ERROR Start failed for URL = http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=254Caught: Error sending command Start to http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=254 
2018-05-20 08:06:45 and 644 ms : cms.gempro.rcms.utilities.fm.task.SimpleTask 
ERROR Task: Startsend to rcms.fm.resource.qualifiedresource.XdaqApplicationContainer failed. 
2018-05-20 08:11:25 and 889 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM::GEMFM_global_cc7] GEMFunctionManager::destroyXDAQ(): destroyXDAQ called 
2018-05-20 08:11:25 and 889 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM::GEMFM_global_cc7] GEMFunctionManager::destroyXDAQ(): killing all other executives(1) in the QualifiedGroup 
2018-05-20 08:11:25 and 890 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM::GEMFM_global_cc7] GEMFunctionManager::destroyXDAQ(): killing executive Executive_0 
2018-05-20 08:11:25 and 890 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM::GEMFM_global_cc7] GEMFunctionManager::destroyXDAQ(): , executive URIhttp://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=0, executive initialized: true 
2018-05-20 08:11:25 and 890 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM::GEMFM_global_cc7] GEMFunctionManager::destroyXDAQ(): killing executive Executive_0 
2018-05-20 08:11:25 and 942 ms : cms.gempro.rcms.fm.resource.qualifiedresource.JobControl 
INFO Time for calling killJID method on http://gemvm-daqcc7.cms:39999/urn:xdaq-application:lid=10 JID=http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=0: 50 ms. 
2018-05-20 08:11:25 and 942 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM::GEMFM_global_cc7] GEMFunctionManager::destroyXDAQ(): done killing executives 
2018-05-20 08:11:25 and 942 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM::GEMFM_global_cc7] GEMFunctionManager::destroyXDAQ(): resetting the QualifiedGroup 
2018-05-20 08:11:25 and 942 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM::GEMFM_global_cc7] GEMFunctionManager::destroyXDAQ(): done! 
2018-05-20 08:11:25 and 942 ms : cms.gempro.rcms.fm.app.gemfm.GEMFunctionManager 
INFO [GEM FM::GEMFM_global_cc7] GEMFunctionManager::destroyAction(): destroying the Qualified Group 
2018-05-20 08:11:25 and 942 ms : cms.gempro.rcms.fm.resource.QualifiedGroup 
INFO http://cmsrc-gem.cms:20000/urn:rcms-fm:fullpath=/gempro/PrivateGlobal/GEM/GEMFM_global_cc7,group=GEMFM_global_cc7,owner=gempro REPORT Destroy level: 3 
Time passed: 0ms 
Running : http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=30 
Running : http://tcds-control-csc-pri.cms:2104/urn:xdaq-application:lid=503 
Running : http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=255 
Running : http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=254 
Running : http://tcds-control-csc-pri.cms:2104/urn:xdaq-application:lid=303 
Running : http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=50 
Summary: running=6, done=0 
2018-05-20 08:11:25 and 943 ms : cms.gempro.rcms.fm.resource.qualifiedresource.XdaqApplication 
INFO renewalTimer=null 
2018-05-20 08:11:25 and 943 ms : cms.gempro.rcms.fm.resource.qualifiedresource.XdaqApplication 
INFO renewalTimer=null 
2018-05-20 08:11:25 and 943 ms : cms.gempro.rcms.fm.resource.qualifiedresource.XdaqApplication 
INFO XdaqServiceApp http://tcds-control-csc-pri.cms:2104/urn:xdaq-application:lid=303 is being destroyed. Going to send it a Halt with empty rcmsURL (regardless of its state). 
2018-05-20 08:11:25 and 943 ms : cms.gempro.rcms.fm.resource.qualifiedresource.XdaqApplication 
INFO XdaqServiceApp http://tcds-control-csc-pri.cms:2104/urn:xdaq-application:lid=503 is being destroyed. Going to send it a Halt with empty rcmsURL (regardless of its state). 
2018-05-20 08:11:25 and 964 ms : cms.gempro.rcms.fm.resource.qualifiedresource.XdaqApplication 
WARN Failed to remove routing table entry for service application http://tcds-control-csc-pri.cms:2104/urn:xdaq-application:lid=503: No entry found. 
2018-05-20 08:11:25 and 972 ms : cms.gempro.rcms.fm.resource.qualifiedresource.XdaqApplication 
WARN Failed to remove routing table entry for service application http://tcds-control-csc-pri.cms:2104/urn:xdaq-application:lid=303: No entry found. 
2018-05-20 08:11:25 and 973 ms : cms.gempro.rcms.fm.resource.QualifiedGroup 
INFO http://cmsrc-gem.cms:20000/urn:rcms-fm:fullpath=/gempro/PrivateGlobal/GEM/GEMFM_global_cc7,group=GEMFM_global_cc7,owner=gempro REPORT Destroy level: 3 
Time passed: 31ms 
Done : http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=30 
Done : http://tcds-control-csc-pri.cms:2104/urn:xdaq-application:lid=503 
Done : http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=255 
Done : http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=254 
Done : http://tcds-control-csc-pri.cms:2104/urn:xdaq-application:lid=303 
Done : http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=50 
Summary: running=0, done=6 
2018-05-20 08:11:25 and 973 ms : cms.gempro.rcms.fm.resource.QualifiedGroup 
INFO http://cmsrc-gem.cms:20000/urn:rcms-fm:fullpath=/gempro/PrivateGlobal/GEM/GEMFM_global_cc7,group=GEMFM_global_cc7,owner=gempro REPORT Destroy level: 2 
Time passed: 0ms 
Running : http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=0 
Summary: running=1, done=0 
2018-05-20 08:11:25 and 973 ms : cms.gempro.rcms.fm.resource.QualifiedGroup 
INFO http://cmsrc-gem.cms:20000/urn:rcms-fm:fullpath=/gempro/PrivateGlobal/GEM/GEMFM_global_cc7,group=GEMFM_global_cc7,owner=gempro REPORT Destroy level: 2 
Time passed: 0ms 
Done : http://gemvm-daqcc7.cms:40100/urn:xdaq-application:lid=0 
Summary: running=0, done=1 
2018-05-20 08:11:25 and 973 ms : cms.gempro.rcms.fm.resource.QualifiedGroup 
INFO http://cmsrc-gem.cms:20000/urn:rcms-fm:fullpath=/gempro/PrivateGlobal/GEM/GEMFM_global_cc7,group=GEMFM_global_cc7,owner=gempro REPORT Destroy level: 0 
Time passed: 0ms 
Running : http://gemvm-daqcc7.cms:39999/urn:xdaq-application:lid=10 
Summary: running=1, done=0 
2018-05-20 08:11:25 and 973 ms : cms.gempro.rcms.fm.resource.QualifiedGroup 
INFO http://cmsrc-gem.cms

Need to understand:

  • What happened
  • How to alarm on it

Need to know the version of the FM that is running

Brief summary of issue

Currently, it's not possible to easily see the version of the jar file that is being used as the FM, which makes debugging difficult in the case that people upload different versions.

Types of issue

  • Feature request (request for change which adds functionality)

Possible Solution

  • Probably the simplest would be to add the git hash to the webpage, as I think HCAL have done in some way

TCDS applications left in "Enabled" after destroy

Brief summary of issue

Seems that the TCDS applications (iCI and PI controllers) can be left in enabled state following GEM being taken out of global. Not sure what the sequence upstream was, but this should not be the case, as this will result in triggers continuing to flow and very likely result in TTS errors

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.