Git Product home page Git Product logo

skill-date-time's Introduction

Date and Time

Get the time, date, day of the week

About

Get the local time or time for major cities around the world. Times are given in 12-hour (2:30 pm) or 24-hour format (14:30) based on the Time Format setting at Home

Time can optionally be shown on a display, like a digital clock. See the Skill Setting.

Examples

  • "What time is it?"
  • "What time is it in Paris?"
  • "Show me the time"
  • "What's the date?"
  • "Tell me the day of the week"
  • "What day is Memorial Day 2020?"

Credits

Mycroft AI (@MycroftAI)

Category

Daily

Tags

#date #time #clock #world-time #world-clock #date-time

skill-date-time's People

Contributors

aiix avatar aleale99 avatar andlo avatar augustnmonteiro avatar btotharye avatar chrisveilleux avatar denics avatar devs-mycroft avatar domcross avatar dschweppe avatar e-gor avatar f-e-l-i-x avatar forslund avatar gador avatar gras64 avatar jmontane avatar kathyreid avatar krisgesling avatar learnedvector avatar luke5sky avatar matthewscholefield avatar notmart avatar penrods avatar puretryout avatar putnik avatar r0d0dendr0n avatar thorstenmueller avatar tony763 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

skill-date-time's Issues

german language issue

The time skills issues a warning:

padaos | Failed to parse the line "Was (sind die |) Tage (für |) | Tag ist) (dieses | nächste) Wochenende" for mycroft-date-time.mycroftai:date.future.weekend.intent

the line by itself is wrong, and also has one parenthesis too many.

Support querying for holidays

I see this skill already depends on the holidays package, and I was wondering if it could allow for questions like "When is the next holiday" (returning e.g. in a week) or "How long is the next holiday" (returning e.g. 3 days) or "What is the next holiday" (returning e.g. summer vacation).

Pronunciation of military time has problems

Need to manually pronounce times to get them correct with various TTS engines (including Mimic). Assume they are all dumb.

Bad examples:
00:19 is pronounces "nineteen" instead of "oh ninteen"

Support Astral 2.1

The current 1.4 version this requires is from 2017, but nowadays the library is on version 2.1 and has changed quite a bit. Please add support for it, it will make packaging this for distributions (like my effort for Alpine Linux currently) quite a lot easier.

ancient version of pytz isn't compatible with modern python versions

Describe the bug
For some reason, this skill pins a 2017 version of pytz, which doesn't work on recent python versions (I think python3.7+)

To Reproduce
Steps to reproduce the behavior:

  1. install mycroft on python3.10
  2. have the date-time skill automatically installed and pull in pytz==2017.2
  3. notice how stuff like the weather skill break with:
2021-12-30 22:44:28.844 | ERROR    | 562711 | mycroft.skills.skill_loader:_load_skill_source:278 | Failed to load skill: mycroft-weather.mycroftai (ImportError("cannot import name 'Mapping' from 'collections' (/usr/lib/python3.10/collections/__init__.py)"))
Traceback (most recent call last):
  File "/home/simon/mycroft-core/.venv/lib/python3.10/site-packages/pytz/lazy.py", line 3, in <module>
    from UserDict import DictMixin
ModuleNotFoundError: No module named 'UserDict'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/simon/mycroft-core/mycroft/skills/skill_loader.py", line 276, in _load_skill_source
    skill_module = load_skill_module(main_file_path, self.skill_id)
  File "/home/simon/mycroft-core/mycroft/skills/skill_loader.py", line 72, in load_skill_module
    spec.loader.exec_module(mod)
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/opt/mycroft/skills/mycroft-weather.mycroftai/__init__.py", line 33, in <module>
    from .skill import (
  File "/opt/mycroft/skills/mycroft-weather.mycroftai/skill/__init__.py", line 14, in <module>
    from .api import OpenWeatherMapApi
  File "/opt/mycroft/skills/mycroft-weather.mycroftai/skill/api.py", line 26, in <module>
    from .weather import WeatherReport
  File "/opt/mycroft/skills/mycroft-weather.mycroftai/skill/weather.py", line 20, in <module>
    from .util import convert_to_local_datetime
  File "/opt/mycroft/skills/mycroft-weather.mycroftai/skill/util.py", line 18, in <module>
    import pytz
  File "/home/simon/mycroft-core/.venv/lib/python3.10/site-packages/pytz/__init__.py", line 32, in <module>
    from pytz.lazy import LazyDict, LazyList, LazySet
  File "/home/simon/mycroft-core/.venv/lib/python3.10/site-packages/pytz/lazy.py", line 5, in <module>
    from collections import Mapping as DictMixin
ImportError: cannot import name 'Mapping' from 'collections' (/usr/lib/python3.10/collections/__init__.py)
2021-12-30 22:44:28.863 | ERROR    | 562711 | mycroft.skills.skill_loader:_communicate_load_status:351 | Skill mycroft-weather.mycroftai failed to load

Expected behavior
A mycroft installation that works out of the box

Environment (please complete the following information):

  • Device type: dosktop
  • OS: archlinux
  • Mycroft-core version: 21.2.2
  • Other versions: python 3.10

Additional context
I see no reason to pin a specific version of pytz or at least not update the pin to the latest release whenever a new release of this skill is made. pytz contains timezone data which needs to be up-to-date in order to be correct. (governments all over the world make regular changes to how their timezones work, an up-to-date pytz is needed to reflect those)

Also note: the weird side effect of this is that asking a freshly installed mycroft "what's the weather" will give you wolfram alpha's definition of "the weather", instead of just the weather.

Language support using nice_time - remove hack

There is a hack right now to fi a problem about nice_time.
I cant see what it should be for problem, as nice_time seems to work as expected.

I have a PR reddy removing the hack if the proble isnt in mycroft-core anymore.

frequent timezone api calls

right now mycroft pulls the current date and time every second.

This leads to an api call for the timezone every second. This should be avoided.

_get_timezone_from_builtins() fails for Europe/Dublin (nominatim gets confused)

Issue

Incorrect time always reported in Dublin, Ireland

Steps to Reproduce

  • Set Time Zone on home.mycroft.ai to "Europe/Dublin"
  • Ask "What time is it?" -> returns incorrect time (timezone +1)
  • Ask "What time is it in Dublin Ireland" -> returns correct time

Cause

This line is asking nominatim for the lat/lng in "Europe/Dublin"

g = geocoder.osm(locale)

Nominatim doesn't understand this, and returns the lat/lng of:

Place de Dublin, Rue Clapeyron, Quartier de l'Europe, Paris 8e Arrondissement, Paris, Île-de-France, France métropolitaine, 75008, France

I fixed this by:

-        try:
-            # This handles common city names, like "Dallas" or "Paris"
-            # first get the lat / long.
-            g = geocoder.osm(locale)
+        if not "/" in locale:
+          try:
+             # This handles common city names, like "Dallas" or "Paris"
+             # first get the lat / long.
+             g = geocoder.osm(locale)

Language support using nice_date

I think most language in mycroft has a nice_date function, so I would think using that in datetime skill would be a easy, and good way to support different languages.

As it is now there is obe specific function for handling de-de language. The hole skill could be made tu support all languages with small changes....

Time in location gives current local time

Can't get any of these to work:

  • What time is it in California
  • What time is it in Sweden
  • What time is it in Alaska
  • What time is it in New York

They all respond with my local time.

Setting active skill to TimeSkill too often

Logs should be self explanatory (look at the timestamps):

14:51:48.160 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:48.162 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:48.164 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:48.165 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:48.166 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:48.167 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:48.167 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:53.171 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:53.173 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:53.174 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:53.175 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:53.176 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:53.177 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill
14:51:53.178 - mycroft.client.enclosure.display_manager:set_active:106 - DEBUG - Setting active skill to TimeSkill

FEATURE REQUEST: Respond to TimeZone Intent as well as Location Intent

User story

As a Mycroft User, I want to be able to ask Mycroft for the time in a particular TimeZone, either by:

  • TimeZone name, eg. "Pacific Time", "Greenwich Mean Time", "Australian Eastern Standard Time", "Mountain Time"
  • TimeZone UTC setting, eg. "U T C plus eleven", "U T C minus five"
    so that this Skill has higher usability and value for me, as someone who works across multiple time zones.

Workaround: Currently I will ask for the time in a city in that TimeZone

"What's the time" gives time in different timezone

When I ask "What's the time", Mycroft is out by 6 hours but when I ask "What's the time in London" I get the right time (I'm in England).

It seems like Mycroft might be defaulting to CDT or something but I'm not really sure. The the timezone is set to 'Europe/London' on the computer Mycroft is running on.

Installing skill-date-time on Mark 1 fails because of numpy

The installation of skill-date-time on a Mark 1 pulls timezonefinder (from requirements.txt), which in turn pulls numpy.

My mark 1 tries to download a zip and build numpy from source, failing:

pi@mycroft:/opt/mycroft/skills $ msm install mycroft-date-time
/opt/venvs/mycroft-core/lib/python3.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py:163: CryptographyDeprecationWarning: OpenSSL version 1.0.1 is no longer supported by the OpenSSL project, please upgrade. The next version of cryptography will drop support for it.
  utils.CryptographyDeprecationWarning
INFO - building SkillEntry objects for all skills
INFO - Best match (1.0): mycroft-date-time by mycroftai
INFO - Downloading skill: https://github.com/mycroftai/skill-date-time
INFO - Installing system requirements...
INFO - Installing requirements.txt for mycroft-date-time
INFO - Problem performing action. Restoring skill to previous state...
INFO - invalidating skills cache
PipRequirementsException: 
Pip returned code 1:
Collecting timezonefinder
  Using cached timezonefinder-4.4.1-py36.py37.py38-none-any.whl (39.2 MB)
Collecting numpy>=1.16
  Using cached numpy-1.19.2.zip (7.3 MB)
  Installing build dependencies: started
  Installing build dependencies: finished with status 'error'

  ERROR: Command errored out with exit status 1:
   command: /opt/venvs/mycroft-core/bin/python /opt/venvs/mycroft-core/lib/python3.7/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-58lvcfgg/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'setuptools<49.2.0' wheel 'Cython>=0.29.21'
       cwd: None
  Complete output (42 lines):
  Traceback (most recent call last):
    File "/opt/python/lib/python3.7/runpy.py", line 193, in _run_module_as_main
      "__main__", mod_spec)
    File "/opt/python/lib/python3.7/runpy.py", line 85, in _run_code
      exec(code, run_globals)
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/pip/__main__.py", line 26, in <module>
      sys.exit(_main())
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/pip/_internal/cli/main.py", line 73, in main
      command = create_command(cmd_name, isolated=("--isolated" in cmd_args))
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/pip/_internal/commands/__init__.py", line 104, in create_command
      module = importlib.import_module(module_path)
    File "/opt/python/lib/python3.7/importlib/__init__.py", line 127, in import_module
      return _bootstrap._gcd_import(name[level:], package, level)
    File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
    File "<frozen importlib._bootstrap>", line 983, in _find_and_load
    File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
    File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
    File "<frozen importlib._bootstrap_external>", line 728, in exec_module
    File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/pip/_internal/commands/install.py", line 17, in <module>
      from pip._internal.cli.req_command import RequirementCommand, with_cleanup
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/pip/_internal/cli/req_command.py", line 16, in <module>
      from pip._internal.index.collector import LinkCollector
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/pip/_internal/index/collector.py", line 14, in <module>
      from pip._vendor import html5lib, requests
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/pip/_vendor/requests/__init__.py", line 125, in <module>
      from . import utils
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/pip/_vendor/requests/utils.py", line 25, in <module>
      from . import certs
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/pip/_vendor/requests/certs.py", line 15, in <module>
      from pip._vendor.certifi import where
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/pip/_vendor/certifi/__init__.py", line 1, in <module>
      from .core import contents, where
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/pip/_vendor/certifi/core.py", line 12, in <module>
      from importlib.resources import path as get_path, read_text
    File "/opt/python/lib/python3.7/importlib/resources.py", line 11, in <module>
      from typing import Iterable, Iterator, Optional, Set, Union   # noqa: F401
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/typing.py", line 1359, in <module>
      class Callable(extra=collections_abc.Callable, metaclass=CallableMeta):
    File "/opt/venvs/mycroft-core/lib/python3.7/site-packages/typing.py", line 1007, in __new__
      self._abc_registry = extra._abc_registry
  AttributeError: type object 'Callable' has no attribute '_abc_registry'
  ----------------------------------------
ERROR: Command errored out with exit status 1: /opt/venvs/mycroft-core/bin/python /opt/venvs/mycroft-core/lib/python3.7/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-58lvcfgg/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- 'setuptools<49.2.0' wheel 'Cython>=0.29.21' Check the logs for full command output.

According to mycroft I'm on the latest version (20.08). However, my mark1 still runs on debian jessie (oldoldstable).

Am I doing something wrong? I don't see the option to "show the time when idle" in the mycroft settings page, that's how I found out it was not installed.

Time can't handle date

This skill actually can't handle the date.

When asked:
"What's the date?"
It errors (without getting a message back)

- DEBUG - {"type": "intent_failure", "data": {"lang": "en-us", "utterance": "What is that date?"}, "context": null}
skill-wolfram-alpha__init__ - DEBUG - WolframAlpha fallback attempt: What is that date?
skill-wolfram-alpha__init__ - DEBUG - Unknown intent: What is that date?
skill-wolfram-alpha__init__ - DEBUG - WolframAlpha fallback attempt: What is that date?at date?"}, "context": null}
skill-wolfram-alpha__init__ - DEBUG - Unknown intent: What is that date?

Need to address.

Should not answer general "when" questions

In a VK test this Skill just triggered on the utterance:

"when will the sun die"

Should see how this might have triggered, and consider tweaking the vocab. Should also consider adding tests to ensure that the Skill does not respond to erroneous "when" questions.

Feature: drop year from date reporting

Is your feature request related to a problem? Please describe.
When reporting the date, I don't think we need to include the year.
eg: "what is the date tomorrow" > "Saturday November 21st"

I could kind of see the argument where the year differs from the current one
eg on new years: "what is the date next Tuesday" > "January 5th 2021"
But even here, the 2021 feels a little unnecessary.

Describe the solution you'd like
Remove year from most, if not all, date reporting.

What do others think?

Interesting error after LF refactor

This is probably LF's problem, but I'm not sure where to start, because all of LF's datetime tests are passing. Anything with a relative datetime, such as, "What is tomorrow's date?" gives me this (sorry about the formatting, plucked from tmux via bat):

2020-10-10 16:07:59.842 | ERROR    | 2049370 | mycroft.skills.mycroft_skill.mycroft_skill:on_error:835 │
  | An error occurred while processing a request in Time Skill                                            │
   Traceback (most recent call last):                                                                     │
     File "/home/chance/development-mycroft-core/mycroft/skills/mycroft_skill/event_container.py", line 66│
  , in wrapper                                                                                            │
       handler(message)                                                                                   │
     File "/opt/mycroft/skills/mycroft-date-time.mycroftai/__init__.py", line 552, in handle_query_relativ|
	e_date_alt
                                                                                                          │
       self.handle_query_date(message, response_type="relative")                                          │
     File "/opt/mycroft/skills/mycroft-date-time.mycroftai/__init__.py", line 506, in handle_query_date   │
       num_days = (day_date - today_date).days                                                            │
   TypeError: can't subtract offset-naive and offset-aware datetimes

I'd love to troubleshoot this, because nobody wants to merge breaking changes, but, yeah, this is what I'm getting at LF's end:

>>> from lingua_franca import load_language, parse
>>> load_language('en')
>>> parse.extract_datetime("tomorrow")
[datetime.datetime(2020, 10, 11, 0, 0), '']
>>> parse.extract_datetime("tomorrow's date")
[datetime.datetime(2020, 10, 11, 0, 0), 'date']
>>> parse.extract_datetime("what day is tomorrow")
[datetime.datetime(2020, 10, 11, 0, 0), 'what day is']
>>> parse.extract_datetime("what is tomorrow's date")
[datetime.datetime(2020, 10, 11, 0, 0), 'what is date']

As of this writing, Mycroft + LF refactor can be tested from my fork branch lf-refactor, which is the branch getting this error

Whats the Date

error | 665 mycroft.skills ... on_error:805

Strange as Whats the time works

Skill thrashing after desktop suspend/resume

After bringing my desktop out of suspend, skill-date-time is thrashing hard on its update_display function.

The update_display should be triggered every 10 seconds or so, but it is instead being triggered at the rate of about twice a second:

10:21:57.791 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.complete", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:21:58.248 - SKILLS - DEBUG - {"type": "-7077859893790634714:TimeSkillupdate_display", "data": {}, "context": null} 10:21:58.253 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.start", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:21:58.291 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.complete", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:21:58.749 - SKILLS - DEBUG - {"type": "-7077859893790634714:TimeSkillupdate_display", "data": {}, "context": null} 10:21:58.754 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.start", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:21:58.791 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.complete", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:21:59.250 - SKILLS - DEBUG - {"type": "-7077859893790634714:TimeSkillupdate_display", "data": {}, "context": null} 10:21:59.255 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.start", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:21:59.295 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.complete", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:21:59.748 - SKILLS - DEBUG - {"type": "-7077859893790634714:TimeSkillupdate_display", "data": {}, "context": null} 10:21:59.750 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.start", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:21:59.790 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.complete", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:22:00.252 - SKILLS - DEBUG - {"type": "-7077859893790634714:TimeSkillupdate_display", "data": {}, "context": null} 10:22:00.256 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.start", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:22:00.295 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.complete", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:22:00.750 - SKILLS - DEBUG - {"type": "-7077859893790634714:TimeSkillupdate_display", "data": {}, "context": null} 10:22:00.752 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.start", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:22:00.790 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.complete", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:22:01.252 - SKILLS - DEBUG - {"type": "-7077859893790634714:TimeSkillupdate_display", "data": {}, "context": null} 10:22:01.255 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.start", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:22:01.299 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.complete", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:22:01.753 - SKILLS - DEBUG - {"type": "-7077859893790634714:TimeSkillupdate_display", "data": {}, "context": null} 10:22:01.756 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.start", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:22:01.794 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.complete", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:22:02.255 - SKILLS - DEBUG - {"type": "-7077859893790634714:TimeSkillupdate_display", "data": {}, "context": null} 10:22:02.260 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.start", "data": {"handler": "TimeSkill.update_display"}, "context": null} 10:22:02.299 - SKILLS - DEBUG - {"type": "mycroft.skill.handler.complete", "data": {"handler": "TimeSkill.update_display"}, "context": null}

I'm not 100% sure what is happening, but I think that it might be the case that the time skill could be delivering a backlog of intents caused by the computer being suspended overnight, and it is now processing through them.

What I think might be best, since this is for updating a display that desktops don't have, would be to detect the existence of the display and to never schedule the recurring intent if there's no display. I can put some code of this nature together, but I don't know if there's a way to detect the existence of a display. Is there?

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.