Git Product home page Git Product logo

first-analysis-steps's People

Contributors

aaren avatar abbycabs avatar abought avatar alexpearce avatar apuignav avatar betatim avatar bsciasci avatar chaen avatar chrisburr avatar elgicse avatar federicalionetto avatar fmichonneau avatar gvwilson avatar henryiii avatar ibab avatar jdblischak avatar jpallen avatar kdungs avatar konstantinschubert avatar lbel avatar mick-mulder avatar olupton avatar pbanaszkiewicz avatar pieterdavid avatar renaudin avatar roelaaij avatar saschastahl avatar seneubert avatar tbekolay avatar wking avatar

Stargazers

 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

first-analysis-steps's Issues

Feedback and evaluation

What feedback do we want? How do we find out what people liked and hated?

Having some stats on how many applied (demand), how many came, how many found it useful, etc would be good.

We need to think about how to ask the questions that will get us the answers we want. We can't ask more than three or four questions, people can't be bothered with long questionnaires.

Moral/ethical/legal issues with installing some kind of analytics on the lesson webpage to track gather info (also after the workshop)?

Minimal DV job on the grid

ganga is the interface to the grid, convert the minimal DV job from #7 to run on the grid, configure storing output on EOS, access the output file and TBrowser it to make mass plot

Finding where your screen sessions are is a bit inefficient

Instead I propose:

Don't remember what machine you left a screen session on?

In your .bashrc on lxplus add the following lines:

if [ $TERM != "dumb" ]; then
cur_DATE=$(date)
cur_HOST=$(hostname)

    echo $cur_DATE" "$cur_HOST >> .lastlxplus

fi

Now, if you forget what node you were on before you went home, login to lxplus and 'tail' .lastlxplus:

Thu Jun 4 09:51:12 CEST 2015 lxplus0082.cern.ch

Using pagsh.krb with screen

Add a callout to the topic on screen explaining the use of pagsh.krb to keep kerberos tokens going in your screen session

Fun with LoKi functors

Move the complicated stuff from #11 here. Then go even deeper?

How to look at the code of a LoKi functor, how to find more LoKi functors, how to figure out what they are doing, why do we need these "adaptor" functions, how to edit the code of a functor and use it.

Download a file from the grid

Use the dirac commandline tool to download a file from the grid. We get the LFN for that file from the section on book-keeping

LoKiHybrid TupleTool

How to get access to LoKi functors to add new variables to the nTuple without writing c++

Here some simple and complex uses of LoKi functors:

jpsi_preamble = ["DZ = VFASPF(VZ) - BPV(VZ)",
              "TZ2 = DZ*3096.916 / PZ/299792458000.0",#in seconds
              "C = 299792458000.0",
              "EPZ = (PCOV2(3,3))**0.5",
              "ZERRV = (VFASPF(VCOV2(2,2)))**0.5",
              "ZERRPRIMARY = BPV(VCOV2(2,2))**0.5",
              "ZERR2 = ZERRPRIMARY*ZERRPRIMARY + ZERRV*ZERRV",
              ]
jpsi_vars = {"ETA": "ETA",
          "Y": "Y",
          "PHI": "PHI",
          "VPCHI2": "VFASPF(VPCHI2)",
          "DELTAZ": "DZ",
          # DZ * M / PZ / c with c in units of mm/s
          "TZ": "TZ2*(10**12)", #ps
          "TZERROR": "( (TZ2*TZ2*EPZ*EPZ)/(PZ*PZ) + (10**24*3096.916*3096.916*ZERR2)/(C*C*PZ*PZ) ) **0.5",
          #DZ*3096.916 / PZ/299792458000.0*(10**12)", #ps
          "minpt": "MINTREE('mu+' == ABSID, PT)",
          "minclonedist": "MINTREE(ISBASIC & HASTRACK, CLONEDIST)",
          "maxtrchi2dof": "MAXTREE(ISBASIC & HASTRACK, TRCHI2DOF)",
          }

tuple.addBranches({"JPsi": "^(%s)"%(decay_descriptor),
                 "muplus": mark(3, decay_descriptor),#"J/psi(1S) -> mu- ^mu+",
                 "muminus": mark(2, decay_descriptor),#"J/psi(1S) -> ^mu- mu+",
                 })
loki_JPsi = tuple.JPsi.addTupleTool("LoKi::Hybrid::TupleTool/LoKi_JPsi")
loki_JPsi.Variables = jpsi_vars
loki_JPsi.Preambulo = jpsi_preamble

Detection of end of file doesn't work in 05-interactive-dst.md

While this usually works, the lines

if not evt["/Event/DAQ/RawEvent"]:
    print "Reached end of input files"
    break

in 05-interactive-dst.md actually don't work in this file because /Event/DAQ/RawEvent doesn't exist. I don't know why, I have been using for years.

Topic on decay descriptors

A new topic exclusively on decay descriptors.

How to make this comprehendible?

Some random snippets I have:

print_decay = appMgr.toolsvc().create('PrintDecayTreeTool', interface="IPrintDecayTreeTool")

# New style decay descriptors, also known as LoKi decays
loki_decay_finder = appMgr.toolsvc().create('LoKi::Decay', interface="Decays::IDecay")
# Old style decay descriptors
old_decay_finder = appMgr.toolsvc().create("DecayFinder", interface="IDecayFinder")

# works
#decay_desc = "[[B0]cc -> (^D- => {^K- ^K+ ^pi-, ^K- ^pi+ ^pi-,^pi+ ^pi- ^pi-, ^K- ^K- ^pi+}) ^K-]cc"
# doesn't work
decay_desc = "[[B0]cc -> (^D- => {^K- ^K+ ^pi-, ^K- ^pi+ ^pi-,^pi+ ^pi- ^pi-}) ^K-]cc"
old_decay_finder.setDecay(decay_desc)

#WS_candidates = evt['/Event/Bhadron/Phys/B02DKWSD2HHHBeauty2CharmLine/Particles']
#B = WS_candidates[0]
#print_decay.printTree(B)
# Can we find the decay?
#old_decay_finder.hasDecay(WS_candidates)

# Beware, you can not repeatedly call this. It somehow keeps track
# of how often it has been called/recursion stuff :-s
#head = Particle()
#old_decay_finder.findDecay(WS_candidates, head)
# head will contain the head of the decay tree
#print head

Demo for screen.md

Run top (or anything the actually does something over a period of time) inside screen.
detach
log out
log back into lxplus
reattach

General introduction to Gaudi/DaVinci

5min summary of the buzzwords one needs to know to make a little sense of what happens in DV.

(as in not "Gaudi is an object orientated framework with tools, algorithms, public tools, ...")

Look inside a DST

Use an interactive python session to explore around the TES of a DST.

Show what is in these stripping locations/decisions, basically some tools to "debug" when things aren't working.

Some random bits of python that could be interesting/staring point for this. Quite Boole/Brunel centric though.

# Configuration done, run time!
appMgr = GP.AppMgr()
evt = appMgr.evtsvc()
det = appMgr.detsvc()
ft_det = det['/dd/Structure/LHCb/AfterMagnetRegion/T/FT']

for n in xrange(100):
    appMgr.run(1)

    digits = evt['/Event/MC/FT/Digits'].containedObjects()
    for digit in digits:
        digit_adcs.Fill(digit.adcCount())

This is from a dst-explore.py I have which contains various useful things, potentially broken in newer versions of DV

# SetupProject DaVinci v35r1
import sys

import GaudiPython as GP
from GaudiConf import IOHelper
from Configurables import LHCbApp, ApplicationMgr, DataOnDemandSvc
from Configurables import SimConf, DigiConf, DecodeRawEvent
from Configurables import CondDB, DstConf, PhysConf
from Configurables import LoKiSvc

MCParticle = GP.gbl.LHCb.MCParticle
Particle = GP.gbl.LHCb.Particle
Track = GP.gbl.LHCb.Track
MCHit = GP.gbl.LHCb.MCHit


def nodes(evt, node=None):
    nodenames = []

    if node is None:
        root = evt.retrieveObject('')
        node = root.registry()

    if node.object():
        nodenames.append(node.identifier())
        for l in evt.leaves(node):
            # skip a location that takes forever to load
            # XXX How to detect these automatically??
            if "Swum" in l.identifier():
                continue

            temp = evt[l.identifier()]
            nodenames += nodes(evt, l)

    else:
        nodenames.append(node.identifier())

    return nodenames

def advance(decision='B02DKWSD2HHHBeauty2CharmLine'):
    """Advance until stripping decision is true, returns
    number of events by which we advanced"""
    n = 0
    while True:
        appMgr.run(1)
        n += 1
        dec=evt['/Event/Strip/Phys/DecReports']
        if dec.hasDecisionName("Stripping%sDecision"%decision):
            break

    return n


# Configure all the unpacking, algorithms, tags and input files
appConf = ApplicationMgr()
appConf.ExtSvc+= ['ToolSvc', 'DataOnDemandSvc', LoKiSvc()]

from Configurables import DaVinci
dv = DaVinci()
dv.DataType = "2012"

lhcbApp = LHCbApp()
lhcbApp.Simulation = False
CondDB().Upgrade = False
# don't really need tags for looking around
#LHCbApp().DDDBtag = t['DDDB']
#LHCbApp().CondDBtag  = t['CondDB']

inputFiles = [sys.argv[-1]]
IOHelper('ROOT').inputFiles(inputFiles)


# Configuration done, run time!
appMgr = GP.AppMgr()
evt = appMgr.evtsvc()

print_decay = appMgr.toolsvc().create('PrintDecayTreeTool', interface="IPrintDecayTreeTool")

# New style decay descriptors, also known as LoKi decays
loki_decay_finder = appMgr.toolsvc().create('LoKi::Decay', interface="Decays::IDecay")
# Old style decay descriptors
old_decay_finder = appMgr.toolsvc().create("DecayFinder", interface="IDecayFinder")

# works
#decay_desc = "[[B0]cc -> (^D- => {^K- ^K+ ^pi-, ^K- ^pi+ ^pi-,^pi+ ^pi- ^pi-, ^K- ^K- ^pi+}) ^K-]cc"
# doesn't work
decay_desc = "[[B0]cc -> (^D- => {^K- ^K+ ^pi-, ^K- ^pi+ ^pi-,^pi+ ^pi- ^pi-}) ^K-]cc"
old_decay_finder.setDecay(decay_desc)

# process first event
appMgr.run(1)

# Get a small print out of what is there in the event
evt.dump()

# print out "all" TES locations
# prints out packed locations, so you need to know
# what the unpacked location is called to actually access it
print "-"*80
for node in nodes(evt):
    print node

# print out the stripping lines which fired for this event
print "-"*80
print evt['/Event/Strip/Phys/DecReports']

# Figure out why your decay descriptor does not work
# type the following into the python terminal
#advance()

#WS_candidates = evt['/Event/Bhadron/Phys/B02DKWSD2HHHBeauty2CharmLine/Particles']
#B = WS_candidates[0]
#print_decay.printTree(B)
# Can we find the decay?
#old_decay_finder.hasDecay(WS_candidates)

# Beware, you can not repeatedly call this. It somehow keeps track
# of how often it has been called/recursion stuff :-s
#head = Particle()
#old_decay_finder.findDecay(WS_candidates, head)
# head will contain the head of the decay tree
#print head

Move to a gh orga

We should move this repo to somewhere that makes it clear that this is a group effort and that everyone is welcome to contribute. Hopefully this way we can encourage others to help create a few more of these collections of lessons on advanced topics like ML or RooFit or Brunel. (There is a lot of demand for that.)

There is a LHCb orga on github, it seems inactive and I have not been able to work out who controls it. We should try again and/or ask gh to put us in touch?

Part of this we should create an open egroup called [email protected] to which anyone can subscribe and list that as the contact point.

stripping.md needs diagrams

This actually holds for all the theory parts: We need more illustrations to quickly convey the main concepts.

DecayTreeFitter

I will make a basic example of the DecayTreeFitter.
Bonus topics might include:

  • switching mass hypothesis in the Fitter
  • Accessing the refitted 3-vectors of the constrained particles by using LoKi:DTF functors (???)

Decay Tree Tuple Branches

This is quite a fundamental topic, needed for other things as well.
I can make a short lesson on branches.

Should we combine this with explanations on the LoKi::CHILD functor?

How to choose my stripping line

Introduce that we use the decay D* -> D(-> K pi) pi

Show how you go about finding a good stripping line for this, show how to look at the code for it, show how to look at what was actually used/configured in stripping21

EOS intro

5min introduction to what EOS is, why you want to use it (put job output there because your AFS is too small), eosmount,

Lesson for making a TupleTool

We should have a lesson for making a basic TupleTool. Provide a nicely formatted, sane template that adds some simple variables.

Could leave using the tool in a DecayTreeTuple instance as a challenge.

linter for example code

Good ideas how to lint our examples? This would solve the problem of having to argue with people about how to format things and keep things tidy.

Add a simple TupleTool

Add a tupletool to the minimal DV job from #9, re-run it, TBrowser to show new branches, how to find the code of the TupleTools, what tupletools exist?

Using GitBook instead of the software-carpentery clone?

You have have already seen GitBook used at CERN:

It's probably a better tool for this document, as you can also allow the reader to change the font and background colours for better readability, but you can also create a built-in glossary to refer to.

The configdocs file I pointed to also has instructions for installing GitBook at CERN: https://configdocs.web.cern.ch/configdocs/gbook/README.html

SetpProject vs lb-run

We should make a decision and make sure we are consistent everywhere.

If we advertise lb-run we need to show off the lb-run Project v1r2 $SHELL trick. (Bonus points for making it modify the prompt to show what project you are in automagically ...)

Cleanup Course

We need to clean up the course to get ready for our performance.

The order needs to be fixed in some places. Numbering needs to be fixed. We should check the logical progression of the course. Some topics that are not finished for this time have to be removed.

Proxy-Init doesn't work when logged into LhcbStarterKit

Log:
[rquaglia@~/StarterKit/Steps$|=>lhcb-proxy-init
Generating proxy...
Enter Certificate password:
Could not add VOMS extensions to the proxy
Failed adding VOMS attribute: Failed to set VOMS attributes. Command: voms-proxy-init -cert "/tmp/x509up_u69481" -key "/tmp/x509up_u69481" -out "/tmp/rquaglia/tmp9dHr7i" -voms "lhcb:/lhcb/Role=user" -valid "23:54" -vomses "/afs/cern.ch/lhcb/software/releases/DIRAC/DIRAC_v6r12p33/etc/grid-security/vomses"; StdOut: Your identity: /DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=rquaglia/CN=758657/CN=Renato Quagliani/CN=proxy
Creating temporary proxy Done
Contacting voms2.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=voms2.cern.ch] "lhcb" Failed

Trying next server for lhcb.
Creating temporary proxy Done
Contacting voms.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=voms.cern.ch] "lhcb" Failed

Trying next server for lhcb.
Creating temporary proxy Done
Contacting lcg-voms2.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=lcg-voms2.cern.ch] "lhcb" Failed

Trying next server for lhcb.
Creating temporary proxy Done
Contacting voms2.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=voms2.cern.ch] "lhcb" Failed

Trying next server for lhcb.
Creating temporary proxy Done
Contacting lcg-voms2.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=lcg-voms2.cern.ch] "lhcb" Failed

Trying next server for lhcb.
Creating temporary proxy Done
Contacting lcg-voms.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=lcg-voms.cern.ch] "lhcb" Failed
; StdErr: .................................................................
Error: Error during SSL handshake:error:80066405:lib(128):verify_callback:outdated CRL found, revoking all certs till you get new CRL:sslutils.c:2115
outdated CRL found, revoking all certs till you get new CRL
Function: verify_callback
error:80066411:lib(128):verify_callback:certificate failed verify::sslutils.c:2318
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
certificate failed verify:
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
Function: verify_callback
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:s3_clnt.c:1172
certificate verify failed
Function: SSL3_GET_SERVER_CERTIFICATE

..............................................
Error: Error during SSL handshake:error:80066405:lib(128):verify_callback:outdated CRL found, revoking all certs till you get new CRL:sslutils.c:2115
outdated CRL found, revoking all certs till you get new CRL
Function: verify_callback
error:80066411:lib(128):verify_callback:certificate failed verify::sslutils.c:2318
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=lcg-voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
certificate failed verify:
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=lcg-voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
Function: verify_callback
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:s3_clnt.c:1172
certificate verify failed
Function: SSL3_GET_SERVER_CERTIFICATE

...............................
Error: Error during SSL handshake:error:80066405:lib(128):verify_callback:outdated CRL found, revoking all certs till you get new CRL:sslutils.c:2115
outdated CRL found, revoking all certs till you get new CRL
Function: verify_callback
error:80066411:lib(128):verify_callback:certificate failed verify::sslutils.c:2318
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
certificate failed verify:
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
Function: verify_callback
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:s3_clnt.c:1172
certificate verify failed
Function: SSL3_GET_SERVER_CERTIFICATE

.......................................................
Error: Error during SSL handshake:error:80066405:lib(128):verify_callback:outdated CRL found, revoking all certs till you get new CRL:sslutils.c:2115
outdated CRL found, revoking all certs till you get new CRL
Function: verify_callback
error:80066411:lib(128):verify_callback:certificate failed verify::sslutils.c:2318
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=lcg-voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
certificate failed verify:
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=lcg-voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
Function: verify_callback
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:s3_clnt.c:1172
certificate verify failed
Function: SSL3_GET_SERVER_CERTIFICATE

.................................................
None of the contacted servers for lhcb were capable
of returning a valid AC for the user.

Are you sure you are properly registered in the VO?
Could not add VOMS extensions to the proxy
Failed adding VOMS attribute: Failed to set VOMS attributes. Command: voms-proxy-init -cert "/tmp/x509up_u69481" -key "/tmp/x509up_u69481" -out "/tmp/rquaglia/tmp9dHr7i" -voms "lhcb:/lhcb/Role=user" -valid "23:54" -vomses "/afs/cern.ch/lhcb/software/releases/DIRAC/DIRAC_v6r12p33/etc/grid-security/vomses"; StdOut: Your identity: /DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=rquaglia/CN=758657/CN=Renato Quagliani/CN=proxy
Creating temporary proxy Done
Contacting voms2.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=voms2.cern.ch] "lhcb" Failed

Trying next server for lhcb.
Creating temporary proxy Done
Contacting voms.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=voms.cern.ch] "lhcb" Failed

Trying next server for lhcb.
Creating temporary proxy Done
Contacting lcg-voms2.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=lcg-voms2.cern.ch] "lhcb" Failed

Trying next server for lhcb.
Creating temporary proxy Done
Contacting voms2.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=voms2.cern.ch] "lhcb" Failed

Trying next server for lhcb.
Creating temporary proxy Done
Contacting lcg-voms2.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=lcg-voms2.cern.ch] "lhcb" Failed

Trying next server for lhcb.
Creating temporary proxy Done
Contacting lcg-voms.cern.ch:15003 [/DC=ch/DC=cern/OU=computers/CN=lcg-voms.cern.ch] "lhcb" Failed
; StdErr: .................................................................
Error: Error during SSL handshake:error:80066405:lib(128):verify_callback:outdated CRL found, revoking all certs till you get new CRL:sslutils.c:2115
outdated CRL found, revoking all certs till you get new CRL
Function: verify_callback
error:80066411:lib(128):verify_callback:certificate failed verify::sslutils.c:2318
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
certificate failed verify:
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
Function: verify_callback
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:s3_clnt.c:1172
certificate verify failed
Function: SSL3_GET_SERVER_CERTIFICATE

..............................................
Error: Error during SSL handshake:error:80066405:lib(128):verify_callback:outdated CRL found, revoking all certs till you get new CRL:sslutils.c:2115
outdated CRL found, revoking all certs till you get new CRL
Function: verify_callback
error:80066411:lib(128):verify_callback:certificate failed verify::sslutils.c:2318
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=lcg-voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
certificate failed verify:
error =CRL has expired
subject=/DC=ch/DC=cern/OU=computers/CN=lcg-voms2.cern.ch
issuer =/DC=ch/DC=cern/CN=CERN Grid Certification Authority
Function: verify_callback
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed:s3_clnt.c:1172
certificate verify failed
Function: SSL3_GET_SERVER_CERTIFICATE

Lesson on mapping git commands to SVN

Developing LHCb software requires interacting with SVN. We should map the git commit that the students will know to SVN commands. I think the list is

  • svn commit -mgit commit -am
  • svn revertgit checkout --
  • svn statusgit status
  • svn add/removegit add/rm

Any more?

Specify prerequisites for each lesson?

The lessons I am working on are rather advanced. Wouldn't it make sense for each lesson to add a small box at the top that points to lessons that are considered as prerequisites for the current one.
Do the SC templates have something like this?

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.