Giter Club home page Giter Club logo

Comments (22)

dext0r avatar dext0r commented on August 20, 2024 2

Похоже проблема в hass_diagnostics, при её отключении ошибки пропадают.

from yandex_smart_home.

dext0r avatar dext0r commented on August 20, 2024

Не совсем понятно, что тут происходит.
Нужен полный home-assistant.log и полный лог супервизора.
Отключение интеграции на странице Настройки - Интеграции решает проблему?
Какая версия компонента? (посмотреть в файле custom_conponents/yandex_smart_home/manifest.json)

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

полный лог - 180мб, но в нем вопщем то и нет ничего, кроме ошибок приведенных выше.
http://gofile.me/6V9I1/YjNeRPXwX

лог супера - в этот раз до супера не дошло, сделал рестарт контейнера, в следующий раз дождусь когда он притушит всех.

отключать интеграцию пока не пробовал

версия - "version": "0.6.12"

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

а вот с 2024.5.0 прилетело

2024-05-01 22:20:23.635 WARNING (MainThread) [py.warnings] /usr/local/lib/python3.12/asyncio/base_events.py:2006: RuntimeWarning: coroutine 'YandexNotifier.async_event_handler' was never awaited def get_debug(self): 2024-05-01 22:20:23.635 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather fut = ensure_future(arg, loop=loop) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future loop = events.get_event_loop() ^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop raise RuntimeError('There is no current event loop in thread %r.' RuntimeError: There is no current event loop in thread 'ImportExecutor_0'. 2024-05-01 22:20:23.636 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather fut = ensure_future(arg, loop=loop) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future loop = events.get_event_loop() ^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop raise RuntimeError('There is no current event loop in thread %r.' RuntimeError: There is no current event loop in thread 'ImportExecutor_0'.

from yandex_smart_home.

dext0r avatar dext0r commented on August 20, 2024

Сохраняется ли проблема если отключить автоматизации: automation.system_update_available_and_installed_notification и automation.system_error_counter?
Судя по логу наблюдается рекурсия между этими двумя автоматизациями

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

отключил, проверю. но судя по синему чату - у людей без этих авто все норм. да и еще один инстанс у меня на 2024.4.0 работает без проблем

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

даже часа не продержался инстанс

`2024-05-02 09:48:48.313 ERROR (SyncWorker_54) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 316, in _put_conn
self.pool.put(conn, block=False)
File "/usr/local/lib/python3.12/queue.py", line 137, in put
raise Full
queue.Full

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener
await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather
fut = ensure_future(arg, loop=loop)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future
loop = events.get_event_loop()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'SyncWorker_53'.
2024-05-02 09:48:48.355 WARNING (SyncWorker_54) [py.warnings] /usr/src/homeassistant/homeassistant/helpers/trace.py:76: RuntimeWarning: coroutine 'YandexNotifier.async_event_handler' was never awaited
variables_cv.set(dict(variables))

2024-05-02 09:48:48.362 ERROR (SyncWorker_54) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 316, in _put_conn
self.pool.put(conn, block=False)
File "/usr/local/lib/python3.12/queue.py", line 137, in put
raise Full
queue.Full

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener
await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather
fut = ensure_future(arg, loop=loop)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future
loop = events.get_event_loop()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'SyncWorker_54'.
2024-05-02 09:48:48.369 ERROR (SyncWorker_54) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 316, in _put_conn
self.pool.put(conn, block=False)
File "/usr/local/lib/python3.12/queue.py", line 137, in put
raise Full
queue.Full

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener
await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather
fut = ensure_future(arg, loop=loop)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future
loop = events.get_event_loop()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'SyncWorker_54'.
2024-05-02 09:48:48.382 ERROR (SyncWorker_54) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 316, in _put_conn
self.pool.put(conn, block=False)
File "/usr/local/lib/python3.12/queue.py", line 137, in put
raise Full
queue.Full

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener
await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather
fut = ensure_future(arg, loop=loop)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future
loop = events.get_event_loop()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'SyncWorker_54'.
2024-05-02 09:48:48.383 WARNING (SyncWorker_54) [py.warnings] /usr/src/homeassistant/homeassistant/helpers/trace.py:79: RuntimeWarning: coroutine 'YandexNotifier.async_event_handler' was never awaited
for key, value in variables.items()

2024-05-02 09:48:48.384 ERROR (SyncWorker_54) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 316, in _put_conn
self.pool.put(conn, block=False)
File "/usr/local/lib/python3.12/queue.py", line 137, in put
raise Full
queue.Full

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener
await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather
fut = ensure_future(arg, loop=loop)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future
loop = events.get_event_loop()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'SyncWorker_54'.
2024-05-02 09:48:48.402 ERROR (SyncWorker_54) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 316, in _put_conn
self.pool.put(conn, block=False)
File "/usr/local/lib/python3.12/queue.py", line 137, in put
raise Full
queue.Full

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener
await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather
fut = ensure_future(arg, loop=loop)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future
loop = events.get_event_loop()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'SyncWorker_54'.
2024-05-02 09:48:48.404 ERROR (SyncWorker_54) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 316, in _put_conn
self.pool.put(conn, block=False)
File "/usr/local/lib/python3.12/queue.py", line 137, in put
raise Full
queue.Full

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener
await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather
fut = ensure_future(arg, loop=loop)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future
loop = events.get_event_loop()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'SyncWorker_54'.
2024-05-02 09:48:48.425 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/urllib3/connectionpool.py", line 316, in _put_conn
self.pool.put(conn, block=False)
File "/usr/local/lib/python3.12/queue.py", line 137, in put
raise Full
queue.Full

During handling of the above exception, another exception occurred:`

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

на старте ХА насыпает

This error originated from a custom integration.

Logger: homeassistant
Source: custom_components/yandex_smart_home/notifier.py:288
integration: Yandex Smart Home (documentation, issues)
First occurred: 09:51:36 (170 occurrences)
Last logged: 09:51:40

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener
await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather
fut = ensure_future(arg, loop=loop)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future
loop = events.get_event_loop()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'ImportExecutor_0'.

from yandex_smart_home.

dext0r avatar dext0r commented on August 20, 2024

Тоже нужен полный home-assistant.log, нужно смотреть какие события были вокруг этих исключений.

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

на старте ХА насыпает

This error originated from a custom integration.

Logger: homeassistant Source: custom_components/yandex_smart_home/notifier.py:288 integration: Yandex Smart Home (documentation, issues) First occurred: 09:51:36 (170 occurrences) Last logged: 09:51:40

Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather fut = ensure_future(arg, loop=loop) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future loop = events.get_event_loop() ^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop raise RuntimeError('There is no current event loop in thread %r.' RuntimeError: There is no current event loop in thread 'ImportExecutor_0'.

ссылка на полный лог
http://gofile.me/6V9I1/JR2Pz8SrK

from yandex_smart_home.

dext0r avatar dext0r commented on August 20, 2024

Вижу, что активный спам начинается после сообщения: 2024-05-02 09:48:48.311 WARNING (SyncWorker_54) [urllib3.connectionpool] Connection pool is full, discarding connection: 192-168-1-47.69bcc3bed480455882f6dbffa7d34b1b.plex.direct. Connection pool size: 10
На этом адресе живёт плекс? Если попробовать временно выключить интеграцию с ним?

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

Да. Тоже его вырубил. Мониторю

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

вопщем без плекса пока живет. попробовал отключить интеграцию яндкса, сделал ребут ХА. включил и снова сделал ребут. логи приложил

без яндекса
http://gofile.me/6V9I1/wci7Pao89

с яндексом
http://gofile.me/6V9I1/xkKDAEBYh

from yandex_smart_home.

dext0r avatar dext0r commented on August 20, 2024

вопщем без плекса пока живет. попробовал отключить интеграцию яндкса, сделал ребут ХА. включил и снова сделал ребут. логи приложил

без яндекса http://gofile.me/6V9I1/wci7Pao89

с яндексом http://gofile.me/6V9I1/xkKDAEBYh

Особой разницы не вижу. Меня только смущает

2024-05-02 14:55:59.206 ERROR (ImportExecutor_0) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/config/custom_components/yandex_smart_home/notifier.py", line 288, in _state_change_listener
    await asyncio.gather(*[n.async_event_handler(event) for n in hass.data[DOMAIN][NOTIFIERS]])
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/asyncio/tasks.py", line 831, in gather
    fut = ensure_future(arg, loop=loop)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/asyncio/tasks.py", line 693, in ensure_future
    loop = events.get_event_loop()
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/asyncio/events.py", line 702, in get_event_loop
    raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'ImportExecutor_0'.
2024-05-02 14:55:59.209 WARNING (ImportExecutor_0) [py.warnings] /usr/src/homeassistant/homeassistant/core.py:727: RuntimeWarning: coroutine 'YandexNotifier.async_event_handler' was never awaited
  @callback

Мне не удаётся воспроизвести эту ситуацию у себя :(
Уходит ли эта ошибка если добавить "import_executor": false в custom_components/yandex_smart_home/manifest.json?

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

добавление запрета на экзекьютор не меняет ситуацию

http://gofile.me/6V9I1/W9glELtiy

from yandex_smart_home.

dext0r avatar dext0r commented on August 20, 2024

init.py.zip
Распаковать и подменить custom_components/yandex_smart_home/init.py
Фикс не окончательный, просто для проверки теории.

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

увы, лучше не стало

image

home-assistant (3).log

from yandex_smart_home.

dext0r avatar dext0r commented on August 20, 2024

Ещё одна попытка :)
Archive.zip - заменить init.py и notifier.py
Перед этим стоит попробовать отключить hass_diagnostics, возможно она оказывает влияние.

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

по мотивам вот этого home-assistant/core#115071 (comment)

стал проверять и вот что нашлось AlexxIT/YandexStation#503

его Алексей поправил - мониторю дальше

from yandex_smart_home.

AlexxIT avatar AlexxIT commented on August 20, 2024

У меня проблема была, что zeroconf работает в отдельном потоке. И из своего отдельного потока он пытался добавить задачу в асинхронную петлю основного потока. Такое конечно же нельзя делать.

ERROR (SyncWorker_54) - тоже означает, что ошибка происходит не в основном потоке. Поэтому нужно очень аккуратно работать с петлёй основного потока.

from yandex_smart_home.

to4ko avatar to4ko commented on August 20, 2024

я после вчерашнего сообщения в чате его удалил на всех инстансах и применил фикс на statistics. значительно спокойней задышал ХА

from yandex_smart_home.

AlexxIT avatar AlexxIT commented on August 20, 2024

Верно. hass_diagnostics тоже нужно чинить

from yandex_smart_home.

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.