GithubHelp home page GithubHelp logo

Comments (12)

ldoktor avatar ldoktor commented on August 24, 2024

Well and do we need to use the silly _log() to log these events? I mean so far as I know autotest cares only about START and END xxx lines. All other lines are basically just logged.

So instead of tweaking and modifying the autotest logger, we can use the default logger to announce start and end of the test and instead of using RUNNING... use simple logging.LOGLEVEL. This is actually similar to how virt-test uses logs (plus they added custom context keyword to be able to parse test steps, which is really cool).

Original:

10:55:16 DEBUG| Test has timeout: 3600 sec.
10:55:16 INFO |         START   docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396342516    timeout=3600    localtime=Apr 01 10:55:16
10:55:16 DEBUG| Persistent state client._record_indent now set to 2
10:55:16 DEBUG| Persistent state client.unexpected_reboot now set to ('docker/subtests/docker_cli/version.test_1-of-2', 'docker/subtests/docker_cli/version.test_1-of-2')
10:55:16 DEBUG| Waiting for pid 8657 for 3600 seconds
10:55:16 INFO |                 RUNNING                 INFO: initialize()
10:55:16 INFO |                 RUNNING                 INFO: run_once() iteration 1 of 1
10:55:16 DEBUG| Running '/usr/bin/docker -D version'
10:55:17 INFO |                 RUNNING                 INFO: postprocess_iteration(), iteration #1
10:55:17 INFO |                 RUNNING                 INFO: Found docker versions client: 0.9.0 server 0.9.0 
10:55:17 INFO |                 RUNNING                 INFO: Docker cli version matches docker client API version
10:55:17 INFO |                 RUNNING                 INFO: cleanup()
10:55:18 INFO |                 GOOD    docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396342518    localtime=Apr 01 10:55:18       completed successfully
10:55:18 INFO |         END GOOD        docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396342518    localtime=Apr 01 10:55:18
10:55:18 DEBUG| Persistent state client._record_indent now set to 1
10:55:18 DEBUG| Persistent state client.unexpected_reboot deleted
10:55:18 DEBUG| Persistent state client.steps now set to []
10:55:18 DEBUG| Test has timeout: 3600 sec.
10:55:18 INFO |         START   docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396342518    timeout=3600    localtime=Apr 01 10:55:18
10:55:18 DEBUG| Persistent state client._record_indent now set to 2
10:55:18 DEBUG| Persistent state client.unexpected_reboot now set to ('docker/subtests/docker_cli/version.test_2-of-2', 'docker/subtests/docker_cli/version.test_2-of-2')
10:55:18 DEBUG| Waiting for pid 8676 for 3600 seconds
10:55:18 INFO |                 RUNNING                 INFO: initialize()
10:55:18 INFO |                 RUNNING                 INFO: run_once() iteration 1 of 1
10:55:18 DEBUG| Running '/usr/bin/docker -D version'
10:55:19 INFO |                 RUNNING                 INFO: postprocess_iteration(), iteration #1
10:55:19 INFO |                 RUNNING                 INFO: Found docker versions client: 0.9.0 server 0.9.0 
10:55:19 INFO |                 RUNNING                 INFO: Docker cli version matches docker client API version
10:55:19 INFO |                 RUNNING                 INFO: cleanup()
10:55:20 INFO |                 GOOD    docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396342520    localtime=Apr 01 10:55:20       completed successfully
10:55:20 INFO |         END GOOD        docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396342520    localtime=Apr 01 10:55:20
10:55:20 DEBUG| Persistent state client._record_indent now set to 1
10:55:20 DEBUG| Persistent state client.unexpected_reboot deleted
10:55:20 INFO | END GOOD        ----    ----    timestamp=1396342520    localtime=Apr 01 10:55:20

Without RUNNING:

10:54:23 DEBUG| Test has timeout: 3600 sec.
10:54:23 INFO |         START   docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396342463    timeout=3600    localtime=Apr 01 10:54:23
10:54:23 DEBUG| Persistent state client._record_indent now set to 2
10:54:23 DEBUG| Persistent state client.unexpected_reboot now set to ('docker/subtests/docker_cli/version.test_1-of-2', 'docker/subtests/docker_cli/version.test_1-of-2')
10:54:23 DEBUG| Waiting for pid 8562 for 3600 seconds
10:54:23 INFO | initialize()
10:54:23 INFO | run_once() iteration 1 of 1
10:54:23 DEBUG| Running '/usr/bin/docker -D version'
10:54:24 INFO | postprocess_iteration(), iteration #1
10:54:24 INFO | Found docker versions client: 0.9.0 server 0.9.0 
10:54:24 INFO | Docker cli version matches docker client API version
10:54:24 INFO | cleanup()
10:54:25 INFO |                 GOOD    docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396342465    localtime=Apr 01 10:54:25       completed successfully
10:54:25 INFO |         END GOOD        docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396342465    localtime=Apr 01 10:54:25
10:54:25 DEBUG| Persistent state client._record_indent now set to 1
10:54:25 DEBUG| Persistent state client.unexpected_reboot deleted
10:54:25 DEBUG| Persistent state client.steps now set to []
10:54:25 DEBUG| Test has timeout: 3600 sec.
10:54:25 INFO |         START   docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396342465    timeout=3600    localtime=Apr 01 10:54:25
10:54:25 DEBUG| Persistent state client._record_indent now set to 2
10:54:25 DEBUG| Persistent state client.unexpected_reboot now set to ('docker/subtests/docker_cli/version.test_2-of-2', 'docker/subtests/docker_cli/version.test_2-of-2')
10:54:25 DEBUG| Waiting for pid 8582 for 3600 seconds
10:54:25 INFO | initialize()
10:54:25 INFO | run_once() iteration 1 of 1
10:54:25 DEBUG| Running '/usr/bin/docker -D version'
10:54:26 INFO | postprocess_iteration(), iteration #1
10:54:26 INFO | Found docker versions client: 0.9.0 server 0.9.0 
10:54:26 INFO | Docker cli version matches docker client API version
10:54:26 INFO | cleanup()
10:54:27 INFO |                 GOOD    docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396342467    localtime=Apr 01 10:54:27       completed successfully
10:54:27 INFO |         END GOOD        docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396342467    localtime=Apr 01 10:54:27
10:54:27 DEBUG| Persistent state client._record_indent now set to 1
10:54:27 DEBUG| Persistent state client.unexpected_reboot deleted
10:54:27 INFO | END GOOD        ----    ----    timestamp=1396342467    localtime=Apr 01 10:54:27

For comparision, there is output of kernel-install virt-test:

10:35:29 INFO | START   ----    ----    timestamp=1396341329    localtime=Apr 01 10:35:29
10:35:29 DEBUG| Persistent state client._record_indent now set to 1
10:35:29 INFO |         START   kernelinstall.3.3.4     kernelinstall.3.3.4     timestamp=1396341329    localtime=Apr 01 10:35:29
10:35:29 DEBUG| Persistent state client._record_indent now set to 2
10:35:29 DEBUG| Persistent state client.unexpected_reboot now set to ('kernelinstall.3.3.4', 'kernelinstall.3.3.4')
10:35:29 INFO | Chose to install kernel through 'tar', proceeding
10:35:29 DEBUG| Running 'rm -rf /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/results/default/kernelinstall.3.3.4/debug'
10:35:29 DEBUG| Running 'rm -rf /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/results/default/kernelinstall.3.3.4/results'
10:35:30 INFO | --- START kernel.extract ---
10:35:30 INFO | kernelexpand: 
10:35:30 INFO | ['http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.4.tar.bz2']
10:35:30 DEBUG| Fetching http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.4.tar.bz2 -> /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tmp/tmp/build/src/linux-3.4.tar.bz2
10:38:21 INFO | Extracting kernel tarball: /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tmp/tmp/build/src/linux-3.4.tar.bz2 ...
10:38:21 DEBUG| Running 'bzcat /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tmp/tmp/build/src/linux-3.4.tar.bz2 | tar xvf - 2>/dev/null'
10:38:36 INFO | --- END kernel.extract ---
10:38:36 INFO |                 GOOD    kernelinstall.3.3.4     kernel.extract  timestamp=1396341516    localtime=Apr 01 10:38:36
10:38:36 DEBUG| Fetching http://www.kernel.org/pub/linux/kernel/v3.0/patch-3.4.4.bz2 -> /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tests/kernelinstall/patch-3.4.4.bz2
10:38:37 INFO | --- START kernel.patch ---
10:38:37 INFO | Applying patches:  ('/home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tests/kernelinstall/patch-3.4.4.bz2',)
10:38:37 INFO | get_file /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tests/kernelinstall/patch-3.4.4.bz2 /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tmp/tmp/build/src/patch-3.4.4.bz2 /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tmp/tmp/build/src patch-3.4.4.bz2
10:38:37 DEBUG| Running 'md5sum /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tmp/tmp/build/src/patch-3.4.4.bz2'
10:38:37 INFO | PATCH: /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tests/kernelinstall/patch-3.4.4.bz2 /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tests/kernelinstall/patch-3.4.4.bz2 51d5b74c3523c5dd8d0f4d1a7abb68be

from autotest-docker.

ldoktor avatar ldoktor commented on August 24, 2024

Sorry, the original is even worse, I played with it for a while so the timestamp, localtime and ----'s are missing.

from autotest-docker.

ldoktor avatar ldoktor commented on August 24, 2024

Anyway if you really insist on "RUNNING ..." we can modify the render class:

    def _log(self, level, message, *args):
        class DockerLogEntry(base_job.status_log_entry):
                def render(self):
                    """
                    Render the status log entry into a text string.
                    :returns: A text string suitable for writing into a status log file.
                    """
                    # combine all the log line data into a tab-delimited string
                    line_items = [self.message]
                    first_line = '\t'.join(line_items)
                    # append the extra unparsable lines, two-space indented
                    all_lines = [first_line]
                    all_lines += ['  ' + line for line in self.extra_message_lines]
                    return '\n'.join(all_lines)
        method = getattr(logging, level)
        message = 'RUNNING %s: %s' % (level.upper(), message)
        sle = DockerLogEntry("RUNNING", None, None, message, {})
        rendered = self._re(sle)
        return method(rendered, *args)

Generates:

11:08:52 DEBUG| Test has timeout: 3600 sec.
11:08:52 INFO |         START   docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396343332    timeout=3600    localtime=Apr 01 11:08:52
11:08:52 DEBUG| Persistent state client._record_indent now set to 2
11:08:52 DEBUG| Persistent state client.unexpected_reboot now set to ('docker/subtests/docker_cli/version.test_1-of-2', 'docker/subtests/docker_cli/version.test_1-of-2')
11:08:52 DEBUG| Waiting for pid 15698 for 3600 seconds
11:08:54 INFO |                 RUNNING INFO: initialize()
11:08:57 INFO |                 RUNNING INFO: run_once() iteration 1 of 1
11:08:57 DEBUG| Running '/usr/bin/docker -D version'
11:08:59 INFO |                 RUNNING INFO: postprocess_iteration(), iteration #1
11:08:59 INFO |                 RUNNING INFO: Found docker versions client: 0.9.0 server 0.9.0 
11:09:00 INFO |                 RUNNING INFO: Docker cli version matches docker client API version
11:09:00 INFO |                 RUNNING INFO: cleanup()
11:09:02 INFO |                 GOOD    docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396343342    localtime=Apr 01 11:09:02       completed successfully
11:09:02 INFO |         END GOOD        docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396343342    localtime=Apr 01 11:09:02
11:09:02 DEBUG| Persistent state client._record_indent now set to 1
11:09:02 DEBUG| Persistent state client.unexpected_reboot deleted
11:09:02 DEBUG| Persistent state client.steps now set to []
11:09:02 DEBUG| Test has timeout: 3600 sec.
11:09:02 INFO |         START   docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396343342    timeout=3600    localtime=Apr 01 11:09:02
11:09:02 DEBUG| Persistent state client._record_indent now set to 2
11:09:02 DEBUG| Persistent state client.unexpected_reboot now set to ('docker/subtests/docker_cli/version.test_2-of-2', 'docker/subtests/docker_cli/version.test_2-of-2')
11:09:02 DEBUG| Waiting for pid 15757 for 3600 seconds
11:09:06 INFO |                 RUNNING INFO: initialize()
11:09:06 INFO |                 RUNNING INFO: run_once() iteration 1 of 1
11:09:06 DEBUG| Running '/usr/bin/docker -D version'
11:09:08 INFO |                 RUNNING INFO: postprocess_iteration(), iteration #1
11:09:08 INFO |                 RUNNING INFO: Found docker versions client: 0.9.0 server 0.9.0 
11:09:08 INFO |                 RUNNING INFO: Docker cli version matches docker client API version
11:09:09 INFO |                 RUNNING INFO: cleanup()
11:09:10 INFO |                 GOOD    docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396343350    localtime=Apr 01 11:09:10       completed successfully
11:09:10 INFO |         END GOOD        docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396343350    localtime=Apr 01 11:09:10
11:09:10 DEBUG| Persistent state client._record_indent now set to 1
11:09:10 DEBUG| Persistent state client.unexpected_reboot deleted
11:09:10 INFO | END GOOD        ----    ----    timestamp=1396343350    localtime=Apr 01 11:09:10

from autotest-docker.

cevich avatar cevich commented on August 24, 2024

Naa, I'm not sold on 'RUNNING'. The only reason it's there is because the autotest client interface asked for something. RUNNING made more sense at the time than the other choices. Don't forget too, this is only for console logging, not the official record, test-logs. That's a different (but related) problem. BTW, thanks for looking into this :)

from autotest-docker.

jzupka avatar jzupka commented on August 24, 2024

what about:

11:08:52 DEBUG| Test has timeout: 3600 sec.
11:08:52 INFO |         START   docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396343332    timeout=3600    localtime=Apr 01 11:08:52
11:08:52 DEBUG| Persistent state client._record_indent now set to 2
11:08:52 DEBUG| Persistent state client.unexpected_reboot now set to ('docker/subtests/docker_cli/version.test_1-of-2', 'docker/subtests/docker_cli/version.test_1-of-2')
11:08:52 DEBUG| Waiting for pid 15698 for 3600 seconds
11:08:54 INFO |              RUNNING : initialize()
11:08:57 INFO |              RUNNING : run_once() iteration 1 of 1
11:08:57 DEBUG|              RUNNING : iRunning '/usr/bin/docker -D version'
11:08:59 INFO |              RUNNING : postprocess_iteration(), iteration #1
11:08:59 INFO |              RUNNING : Found docker versions client: 0.9.0 server 0.9.0 
11:09:00 INFO |              RUNNING : Docker cli version matches docker client API version
11:09:00 INFO |              RUNNING : cleanup()
11:09:02 INFO |              GOOD    docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396343342    localtime=Apr 01 11:09:02       completed successfully
11:09:02 INFO |         END GOOD        docker/subtests/docker_cli/version.test_1-of-2  docker/subtests/docker_cli/version.test_1-of-2  timestamp=1396343342    localtime=Apr 01 11:09:02
11:09:02 DEBUG| Persistent state client._record_indent now set to 1
11:09:02 DEBUG| Persistent state client.unexpected_reboot deleted
11:09:02 DEBUG| Persistent state client.steps now set to []
11:09:02 DEBUG| Test has timeout: 3600 sec.
11:09:02 INFO |         START   docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396343342    timeout=3600    localtime=Apr 01 11:09:02
11:09:02 DEBUG|              RUNNING: Persistent state client._record_indent now set to 2
11:09:02 DEBUG|              RUNNING: iPersistent state client.unexpected_reboot now set to ('docker/subtests/docker_cli/version.test_2-of-2', 'docker/subtests/docker_cli/version.test_2-of-2')
11:09:02 DEBUG|              RUNNING: iWaiting for pid 15757 for 3600 seconds
11:09:06 INFO |              RUNNING: initialize()
11:09:06 INFO |              RUNNING: run_once() iteration 1 of 1
11:09:06 DEBUG|              RUNNING: Running '/usr/bin/docker -D version'
11:09:08 INFO |              RUNNING: postprocess_iteration(), iteration #1
11:09:08 INFO |              RUNNING: Found docker versions client: 0.9.0 server 0.9.0 
11:09:08 INFO |              RUNNING: Docker cli version matches docker client API version
11:09:09 INFO |              RUNNING: cleanup()
11:09:10 INFO |              GOOD    docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396343350    localtime=Apr 01 11:09:10       completed successfully
11:09:10 INFO |         END GOOD        docker/subtests/docker_cli/version.test_2-of-2  docker/subtests/docker_cli/version.test_2-of-2  timestamp=1396343350    localtime=Apr 01 11:09:10
11:09:10 DEBUG|Persistent state client._record_indent now set to 1
11:09:10 DEBUG| Persistent state client.unexpected_reboot deleted
11:09:10 INFO | END GOOD        ----    ----    timestamp=1396343350    localtime=Apr 01 11:09:10

from autotest-docker.

ldoktor avatar ldoktor commented on August 24, 2024

Everything is doable... We just have to pick the right form. I prefer the first one as the only indented part is START and END xxx lines. So I'm able to find them easily. All the rest uses as much space as possible so I don't need to scroll the view (I use portrait display).

Anyway all mentioned solutions works for me and IMO are better than current solution.

from autotest-docker.

cevich avatar cevich commented on August 24, 2024

Yeah, that looks nice!

I'd say even the RUNNING is optional (we assume it between START/END).

If there's a way to wipe-out all the extra/redundant timestamps & duplicated URI's it would be even better (just on the console output, the log files I don't care). If not, oh well, it's still a LOT better than what we have now.

from autotest-docker.

ldoktor avatar ldoktor commented on August 24, 2024

Well, it's not really convenient, but I'm able to do something like this:

15:43:26 INFO | START   ----    ----    timestamp=1396446206    localtime=Apr 02 15:43:26
15:43:26 DEBUG| Persistent state client._record_indent now set to 1
15:43:26 DEBUG| Persistent state client.steps now set to [([], 'step_init', (), {})]
15:43:26 DEBUG| Persistent state client.steps now set to []
15:43:26 DEBUG| Persistent state client.steps now set to [([], 'run_test', ('/home/medic/Work/Projekty/autotest/autotest-ldoktor/client/tests/docker', 'docker/subtests/docker_cli/version', 'test_1-of-1', 600), {})]
15:43:26 DEBUG| Persistent state client.steps now set to []
15:43:26 DEBUG| Test has timeout: 600 sec.
15:43:26 INFO |         START   docker/subtests/docker_cli/version.test_1-of-1  docker/subtests/docker_cli/version.test_1-of-1  timestamp=1396446206    timeout=600     localtime=Apr 02 15:43:26
15:43:26 DEBUG| Persistent state client._record_indent now set to 2
15:43:26 DEBUG| Persistent state client.unexpected_reboot now set to ('docker/subtests/docker_cli/version.test_1-of-1', 'docker/subtests/docker_cli/version.test_1-of-1')
15:43:26 DEBUG| Waiting for pid 8430 for 600 seconds
15:43:26 INFO |                 initialize()
15:43:26 INFO |                 run_once() iteration 1 of 1
15:43:26 INFO |                 aaa
  bbb
15:43:26 DEBUG|                 bbb
  ccc
15:43:27 INFO |                 postprocess_iteration(), iteration #1
15:43:27 INFO |                 Found docker versions client: 0.9.0 server 0.9.0 
15:43:27 INFO |                 Docker cli version matches docker client API version
15:43:27 INFO |                 cleanup()
15:43:28 INFO |                 GOOD    docker/subtests/docker_cli/version.test_1-of-1  docker/subtests/docker_cli/version.test_1-of-1  timestamp=1396446208    localtime=Apr 02 15:43:28       completed successfully
15:43:28 INFO |         END GOOD        docker/subtests/docker_cli/version.test_1-of-1  docker/subtests/docker_cli/version.test_1-of-1  timestamp=1396446208    localtime=Apr 02 15:43:28
15:43:28 DEBUG| Persistent state client._record_indent now set to 1
15:43:28 DEBUG| Persistent state client.unexpected_reboot deleted
15:43:28 INFO | END GOOD        ----    ----    timestamp=1396446208    localtime=Apr 02 15:43:28
15:43:28 DEBUG| Persistent state client._record_indent now set to 0
15:43:28 INFO | Report successfully generated at /home/medic/Work/Projekty/autotest/autotest-ldoktor/client/results/default/job_report.html

But it requires use of self.loginfo() instead of import logging; logging.info().

from autotest-docker.

cevich avatar cevich commented on August 24, 2024

(Assigned to you, pinned to 'future', I'm undecided if this can/should go into 0.6.x)

from autotest-docker.

ldoktor avatar ldoktor commented on August 24, 2024

OK, it's number 4 on my TODOlist, should be very simple, though. Just start using self.logxxx instead of import logging to minimize the impact ;-)

from autotest-docker.

cevich avatar cevich commented on August 24, 2024

Aye, probably could address it through logging but autotest already has it's hands all over that and there are many private methods :S As long as we're using self.logxxx() bloody everywhere it's possible, we can change self.logxxx and fix the problem all at once.

Oh right, I did put it on there, good. Okay, pegging this onto #32

from autotest-docker.

cevich avatar cevich commented on August 24, 2024

This is addressed in #61 no reason to have issue open on it as well.

from autotest-docker.

Related Issues (20)

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.