sardemff7 / eventd Goto Github PK
View Code? Open in Web Editor NEWA simple daemon to track remote or local events and do actions the user wants to
Home Page: https://www.eventd.org
License: Other
A simple daemon to track remote or local events and do actions the user wants to
Home Page: https://www.eventd.org
License: Other
For packaging eventd, the ability to build both the plugin and dbus functionality at the same time would be great. Currently, the package would either need to be built twice or be missing functionality. The two should probably detect that the other is in use and become a no-op.
libsoup2 is deprecated and unfortunately, while libsoup2 and libsoup3 can be installed in parallel, they can't be loaded within the same process - which causes problems if the other is loaded transitively by another dependency of some software.
Needs a port to libsoup3 API.
Currently, not having the notify
plugin doesn't output that anything is amiss when a Libnotify
action is attempted.
I was able to compile eventd with the Wayland backend on my Arch installation running the latest swaywm (here is the meson-log output relevant to the Wayland backend. However, running eventdctl nd backends
still only shows xcb
and eventdctl nd switch wayland $WAYLAND_DISPLAY
results in event notifications not showing anything. On top of that I'm noticing that running with the xcb backend, notifications grab focus from the currently focused window. I also have a second display plugged in (running off a laptop in clamshell mode) and the notification is positioned relative to the laptop's display, not the external one.
I'm assuming the latter issue is due to not being able to use the Wayland backend. I'm also assuming that the Wayland backend is not working because Sway does not implement your notification area protocol. Can you help me verify if those assumptions are correct or if it should work and maybe there's another issue?
Thanks!
EDIT: Is there a reason now not to use the WLR layer shell spec instead? That seems like the ideal way to implement notifications that would be compatible with the most compositors (anything built on wlroots for a start).
Not sure why it's missing; I don't see an export-ignore
attribute for it.
There have been more API changes. A new version bump/tag would be appreciated :) . Thanks.
I am not sure, if this is a bug or just a problem with my system.
I cannot find a way to get notifications with non-ascii symbols to work.
My system is configured to use utf-8 everywhere and has no encoding problems with anything else.
This is a part of my env:
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
I am using
eventc 0.24.1 (using libeventc 0.24.1)
and a command like
eventc critical battery -d "title='Batterie lädt!'"
will fail with the message
(eventc:5279): eventc-WARNING **: 23:40:20.682: Couldn't parse the arguments: Invalid byte sequence in conversion input
Also bubbles not triggered from eventc but the dbus-notify plugin wont get shown, when they contain unicode.
I use nixos and have compiled eventd myself. Might it be, that I could some compile parameters wrong?
Any help on this would be much appreciated!
Some options for the nd plugin are being ignored for me. I cannot set the size, anchor, etc. of images.
This is my configuration:
[Queue default]
Anchor=top-right
Margin=20
Spacing=10
Limit=3
OldestAtAnchor=true
[Queue topleft]
Anchor=top-left
Margin=14
Spacing=10
Limit=5
OldestAtAnchor=true
[Queue top]
Anchor=top
Margin=14
Spacing=10
Limit=5
[Notification]
Text=${title}${message/^/\n}
[NotificationBubble]
Padding=20
Radius=0
Border=2
BorderColour=#35586c
BorderBlur=0
Colour=#151718
[NotificationText]
Font=GohuFont 11px
Colour=#FFF
[NotificationImage]
Width=100
Height=-1
FixedSize=false
Anchor=Bottom
[NotificationIcon]
Placement=Foreground
Height=25
(using git 1055845 )What I did was to set in eventd.conf
to :
[Notification]
Anchor=bottom left
When trying to use notify-send, eventd
ends in a SEGFAULT (line 71 in src/libnkutils/src/token.c).
See discussion on abe7b18.
Should allow event plugins to be written in other languages.
Hello, I'd love to use eventd but sadly the build fails for me.
When trying to install from AUR check()
fails.
Here are the full logs.
Long story short that is the error:
--- stderr ---
**
ERROR:../eventd-0.24.1/src/libnkutils/tests/token.c:972:_nk_token_list_tests_func: assertion failed (result == data->result): ("Thu M\303\244r 1 14:14:08 2018" == "Thu Mar 1 14:14:08 2018")
-------
During rc1 testing for the upcoming Meson release, eventd stopped building with the following error:
The Meson build system
Version: 0.63.0.rc1
Source dir: /tmp/eventd
Build dir: /tmp/eventd/builddir
Build type: native build
Project name: eventd
Project version: 0.27.0
C compiler for the host machine: ccache cc (gcc 11.1.0 "cc (GCC) 11.1.0")
C linker for the host machine: cc ld.bfd 2.36.1
Host machine cpu family: x86_64
Host machine cpu: x86_64
Found pkg-config: /usr/bin/pkg-config (1.8.0)
Run-time dependency glib-2.0 found: YES 2.70.3
Run-time dependency gobject-2.0 found: YES 2.70.3
Run-time dependency gio-2.0 found: YES 2.70.3
Run-time dependency gio-unix-2.0 found: YES 2.70.3
Run-time dependency gmodule-2.0 found: YES 2.70.3
Has header "locale.h" : YES
Has header "fcntl.h" : YES
Has header "errno.h" : YES
Has header "sys/socket.h" : YES
Configuring config.h using configuration
meson.build:112:0: ERROR: Sandbox violation: Tried to grab file config.ent.in from a nested subproject.
This happens due to the following lines:
Line 9 in 533e93a
Line 112 in 533e93a
As the src/ directory has been defined as a resource path for vendoring external projects, it cannot also contain primary project resources (in this case config.ent.in) as it breaks the sandbox model. This likely should never have worked, but apparently hit a codepath that was never validated. Due to internal refactoring in Meson, this now behaves like other inputs.
Originally reported in https://bugs.gentoo.org/854195
I've recently switched from dunst to eventd, and this is quite good. However, there are a few features that dunst has but eventd doesn't that would be great:
These could be implemented as eventdctl commands. How hard would these be to implement?
All previous reports where my own mistakes!
bottom left/right
works as expected, no issues. However would it be possible to have bottom middle box placement ?
Hello.
Current eventd release doesn't build with recent versions of meson.
I know the changes are in master already, but the patches are changing build system all over the place.
Github also doesn't make things easier to use snapshots as it doesn't include submodules in tarballs.
Could you please tag a new release?
There should be a way to fill out hints for notifications from the config file. Something like:
[Libnotify]
Hints=foo;bar
Hint_foo=${some_field}
Hint_bar=${some_other_field}
https://developer.gnome.org/libnotify/0.7/NotifyNotification.html#notify-notification-set-hint
This made it easy to know where to install plugins. Is this information still available somewhere?
Hello.
I am using eventd-git @ 9ed3f9d without any manual configuration.
Every notification is displayed with some artefacts around it: https://i.imgur.com/xna3dWU.png
OS is Gentoo amd64, xorg-server-git @ 29a4f3db, mesa-13.0.2, i965 video chip.
I understand this is too little info, but I am ready to provide any other info per your request.
Please fix.
It'd be a nice feature to have rather than just truncating long text
I try to use eventd in my arch + wayland + sway setup.
It works fine only when i start eventd
in terminal, but i cannot find right eventdctl
command to start it in background.
I'm seeing this in my build logs locally:
-D G_LOG_DOMAIN=\"boeckb\"
Which seems…wrong :) .
With bindings, plugins will need to go and find other plugins to work properly (eventd shouldn't know how to load a Ruby or Python plugin). Instead, a single Python plugin should have functions which go off and find Python modules which are plugins.
My idea is to have 3 symbols which are functions: one which returns a list of ids, another to get the context for an id and another for the get_interface
function. The problem is that some state needs to be passed to the get_interface
function (or some global state needs to be tracked ugh). Maybe better would be to pass a function which the meta plugin calls to register the plugins it finds back with the server? Unloading will also be interesting since the module can't be closed until all children plugins have been dealt with.
Hello.
Spec on XDG_RUNTIME_DIR says:
The directory MUST be owned by the user, and he MUST be the only one
having read and write access to it. Its Unix access mode MUST be 0700.
[...]
If $XDG_RUNTIME_DIR is not set applications should fall back to
a replacement directory with similar capabilities and print a warning
message.
FHS spec on /run
says:
/run should not be writable for unprivileged users; it is a major
security problem if any user can write in this directory. User-specific
subdirectories should be writable only by each directory's owner.
eventd falls back to /run/eventd
directory when XDG_RUNTIME_DIR isn't set. Because /run
mustn't be writable by regular users, this attempt fails, e.g:
~ $ echo $XDG_RUNTIME_DIR
~ $ eventdctl start
(eventd:2362): eventd-WARNING **: Couldn't create the run dir '/run/eventd': Permission denied
Segmentation fault (core dumped)
This problem prevents d-bus activation from happening when XDG_RUNTIME_DIR is not set.
Please fix.
Other .la
files are removed, but this one seems to still exist.
Hello.
eventd-0.24.0 fails test:
>>> Test phase: net-misc/eventd-0.24.0-r9999
ninja -v -j4 -l4 -C /var/tmp/portage/net-misc/eventd-0.24.0-r9999/work/eventd-0.24.0-build test
ninja: Entering directory `/var/tmp/portage/net-misc/eventd-0.24.0-r9999/work/eventd-0.24.0-build'
[1/33] /var/tmp/portage/net-misc/eventd-0.24.0-r9999/work/eventd-0.24.0-build/src/libnkutils/nk-git-version header src/libnkutils/nkutils-git-version.h /var/tmp/portage/net-misc/eventd-0.24.0-r9999/work/eventd-0.24.0 /var/tmp/portage/net-misc/eventd-0.24.0-r9999/work/eventd-0.24.0/.git /usr/bin/git
[2/12] /var/tmp/portage/net-misc/eventd-0.24.0-r9999/work/eventd-0.24.0-build/src/libnkutils/nk-git-version entity src/libnkutils/nkutils-git-version.ent /var/tmp/portage/net-misc/eventd-0.24.0-r9999/work/eventd-0.24.0 /var/tmp/portage/net-misc/eventd-0.24.0-r9999/work/eventd-0.24.0/.git /usr/bin/git
[2/3] /usr/bin/python3.5 -u /usr/lib/python-exec/python3.5/meson test --no-rebuild --print-errorlogs
1/14 libnkutils / libnkutils uuid module tests OK 0.05 s
2/14 libnkutils / libnkutils token module tests FAIL 0.10 s
3/14 libnkutils / libnkutils gtk-settings module tests OK 0.06 s
4/14 libnkutils / libnkutils xdg-de module tests OK 0.33 s
5/14 libnkutils / libnkutils xdg-theme module tests OK 0.21 s
6/14 libnkutils / libnkutils enum module tests OK 0.04 s
7/14 libnkutils / libnkutils colour module tests OK 0.04 s
8/14 libnkutils / libnkutils bindings module tests OK 1.12 s
9/14 eventd / libeventd-event unit tests OK 0.23 s
10/14 eventd / libeventd-protocol unit tests OK 0.03 s
11/14 eventd / eventd EvP integration test OK 0.40 s
12/14 eventd / eventd relay integration test OK 0.52 s
13/14 eventd / eventd ws integration test OK 0.49 s
14/14 eventd / libeventc integration test OK 0.28 s
OK: 13
FAIL: 1
SKIP: 0
TIMEOUT: 0
The output from the failed tests:
2/14 libnkutils / libnkutils token module tests FAIL 0.10 s
--- command ---
/var/tmp/portage/net-misc/eventd-0.24.0-r9999/work/eventd-0.24.0-build/src/libnkutils/nk-token.test
--- stdout ---
/nkutils/token/basic: OK
/nkutils/token/basic/dash-underscore: OK
/nkutils/token/basic/unicode: OK
/nkutils/token/basic/boolean/true: OK
/nkutils/token/basic/boolean/false: OK
/nkutils/token/basic/wrong/1: OK
/nkutils/token/basic/wrong/2: OK
/nkutils/token/key/name: OK
/nkutils/token/key/index/positive: OK
/nkutils/token/key/index/negative: OK
/nkutils/token/key/name/modifier: OK
/nkutils/token/key/join/default: OK
/nkutils/token/key/join/custom: OK
/nkutils/token/key/join/replace: OK
/nkutils/token/wrong/modifier: OK
/nkutils/token/wrong/key: OK
/nkutils/token/wrong/key/index: OK
/nkutils/token/wrong/regex/pattern: OK
/nkutils/token/wrong/regex/replace: OK
/nkutils/token/fallback/with: OK
/nkutils/token/fallback/without: OK
/nkutils/token/fallback/recurse: OK
/nkutils/token/fallback/boolean/true: OK
/nkutils/token/fallback/boolean/false: OK
/nkutils/token/substitute/with: OK
/nkutils/token/substitute/without: OK
/nkutils/token/substitute/boolean/true: OK
/nkutils/token/substitute/boolean/false: OK
/nkutils/token/anti-substitute/with: OK
/nkutils/token/anti-substitute/without: OK
/nkutils/token/anti-substitute/boolean/true: OK
/nkutils/token/anti-substitute/boolean/false: OK
/nkutils/token/range/symbol: OK
/nkutils/token/range/text: OK
/nkutils/token/range/middle-split: OK
/nkutils/token/range/double: OK
/nkutils/token/range/plural/singular: OK
/nkutils/token/range/plural/plural: OK
/nkutils/token/prettify/float/width: OK
/nkutils/token/prettify/float/0-padding: OK
/nkutils/token/prettify/float/precision: FAIL
/nkutils/token/prettify/prefixes/binary: FAIL
/nkutils/token/prettify/prefixes/si/big: OK
/nkutils/token/prettify/prefixes/si/small: OK
/nkutils/token/prettify/prefixes/si/with-precision: FAIL
/nkutils/token/prettify/prefixes/si/2-precision: FAIL
/nkutils/token/prettify/prefixes/si/0-precision: OK
/nkutils/token/prettify/time/default: OK
/nkutils/token/prettify/time/with-format: OK
/nkutils/token/prettify/duration/default: OK
/nkutils/token/prettify/duration/with-format: OK
/nkutils/token/replace/full: OK
/nkutils/token/replace/missing: OK
/nkutils/token/replace/capture: OK
/nkutils/token/replace/remove: OK
/nkutils/token/replace/multiple: OK
/nkutils/token/replace/before-after/with: OK
/nkutils/token/replace/before-after/without: OK
/nkutils/token/replace/braces/paired: OK
/nkutils/token/replace/braces/opening: OK
/nkutils/token/replace/braces/closing: OK
/nkutils/token/replace/escaping/backslash: OK
/nkutils/token/replace/escaping/forwardslash/1: OK
/nkutils/token/replace/escaping/forwardslash/2: OK
/nkutils/token/replace/escaping/forwardslash/3: OK
/nkutils/token/replace/escaping/right-curly-bracket/2: OK
/nkutils/token/replace/recurse/with: OK
/nkutils/token/old/before-after: OK
/nkutils/token/identifier/double-escape: OK
/nkutils/token/identifier/non-dollar: OK
/nkutils/token/identifier/none: OK
/nkutils/token/enum/basic: OK
/nkutils/token/enum/nested: OK
/nkutils/token/enum/fallback: OK
/nkutils/token/enum/substitute: OK
/nkutils/token/enum/anti-substitute: OK
/nkutils/token/enum/regex: OK
/nkutils/token/enum/prettify/float: FAIL
/nkutils/token/enum/prettify/prefixes/si: OK
/nkutils/token/enum/prettify/prefixes/binary: OK
/nkutils/token/enum/wrong/regex: OK
/nkutils/token/enum/wrong/token: OK
--- stderr ---
**
ERROR:../eventd-0.24.0/src/libnkutils/tests/token.c:972:_nk_token_list_tests_func: assertion failed (result == data->result): ("1,00000" == "1.00000")
**
ERROR:../eventd-0.24.0/src/libnkutils/tests/token.c:972:_nk_token_list_tests_func: assertion failed (result == data->result): ("612,015625Ki" == "612.015625Ki")
**
ERROR:../eventd-0.24.0/src/libnkutils/tests/token.c:972:_nk_token_list_tests_func: assertion failed (result == data->result): ("1,0M" == "1.0M")
**
ERROR:../eventd-0.24.0/src/libnkutils/tests/token.c:972:_nk_token_list_tests_func: assertion failed (result == data->result): ("626,70k" == "626.70k")
**
ERROR:../eventd-0.24.0/src/libnkutils/tests/token.c:1166:_nk_token_list_enum_tests_func: assertion failed (result == data->result): ("1,56" == "1.56")
-------
Full log written to /var/tmp/portage/net-misc/eventd-0.24.0-r9999/work/eventd-0.24.0-build/meson-logs/testlog.txt
FAILED: meson-test
/usr/bin/python3.5 -u /usr/lib/python-exec/python3.5/meson test --no-rebuild --print-errorlogs
ninja: build stopped: subcommand failed.
Full test log: https://paste.pound-python.org/show/VrdzkeB1cOEmTnZ2cbOd/
Full build log: https://paste.pound-python.org/show/JGjDQ7mLipS4fdm6mxpj/
I'm using eventd solely for its nd
plugin - getting and displaying notifications.
Here's my config (now being placed both in ~/.config/eventd/eventd.conf
and /usr/share/eventd/eventd.conf
):
[NotificationText]
Font=Terminus 16px
Colour=#DDDDDD
[NotificationBubble]
Colour=#00FF00
Nothing changes when I try to notify-send Title Message
. The notification with default notification theme is displayed.
I'm running eventd on Arch Linux x64 (i3 window manager), eventd
package from AUR installed without any modifications.
Not sure what's causing the problem here. Not detecting as Unix? Works in an old buildtree of mine, but the RPM isn't picking them up anymore. Build logs.
meson --buildtype plain --libdir lib64 --localstatedir /var/lib --prefix /usr --sysconfdir /etc --wrap-mode nodownload -Dsystemduserunitdir=/usr/lib/systemd/user -Dsystemdsystemunitdir=/usr/lib/systemd/system -Ddbussessionservicedir=/usr/share/dbus-1/services -Denable-websocket=false -Denable-dns-sd=false -Denable-ssdp=false -Denable-ipv6=true -Denable-systemd=false -Denable-notification-daemon=true -Denable-nd-wayland=false -Denable-nd-xcb=true -Denable-nd-fbdev=false -Denable-im=false -Denable-sound=false -Denable-tts=false -Denable-webhook=false -Denable-libnotify=true -Denable-libcanberra=false -Denable-gobject-introspection=true -Denable-debug=false /var/tmp/portage/net-misc/eventd-0.23.0_p20171112/work/eventd-0.23.0_p20171112 /var/tmp/portage/net-misc/eventd-0.23.0_p20171112/work/eventd-0.23.0_p20171112-build
The Meson build system
Version: 0.44.0
Source dir: /var/tmp/portage/net-misc/eventd-0.23.0_p20171112/work/eventd-0.23.0_p20171112
Build dir: /var/tmp/portage/net-misc/eventd-0.23.0_p20171112/work/eventd-0.23.0_p20171112-build
Build type: native build
Project name: eventd
Native C compiler: x86_64-pc-linux-gnu-gcc (gcc 7.2.0)
Appending CFLAGS from environment: '-O2 -pipe -march=native -Wall'
Appending LDFLAGS from environment: '-Wl,-O1 -Wl,--as-needed'
Build machine cpu family: x86_64
Build machine cpu: x86_64
Found pkg-config: /usr/bin/x86_64-pc-linux-gnu-pkg-config (1.3.90)
Native dependency glib-2.0 found: YES 2.52.3
Native dependency gobject-2.0 found: YES 2.52.3
Native dependency gio-2.0 found: YES 2.52.3
Native dependency gio-unix-2.0 found: YES 2.52.3
Native dependency gmodule-2.0 found: YES 2.52.3
Has header "locale.h": YES
Has header "fcntl.h": YES
Has header "errno.h": YES
Has header "sys/socket.h": YES
Configuring config.h using configuration
Configuring config.ent using configuration
Compiler for C supports argument -Wformat=2: YES
Compiler for C supports argument -Wno-unused-parameter: YES
Executing subproject libnkutils.
Project name: libnkutils
Native C compiler: x86_64-pc-linux-gnu-gcc (gcc 7.2.0)
Native dependency uuid found: YES 2.31.0
Native dependency xkbcommon found: YES 0.7.2
Program git found: YES (/usr/bin/git)
Build targets in project: 14
Subproject libnkutils finished.
Program g-ir-scanner found: YES (/usr/bin/g-ir-scanner)
Program g-ir-compiler found: YES (/usr/bin/g-ir-compiler)
Native dependency gobject-introspection-1.0 found: YES 1.52.1
Has header "sys/un.h": YES
Has header "netinet/in.h": YES
Native dependency libsoup-2.4 found: YES 2.58.2
Dependency avahi-client found: NO
Dependency avahi-glib found: NO
Native dependency gssdp-1.0 found: YES 1.0.2
Configuring org.eventd.fdo-notifications.service using configuration
Native dependency gdk-pixbuf-2.0 found: YES 2.36.10
Native dependency cairo found: YES 1.14.12
Native dependency pango found: YES 1.40.12
Native dependency pangocairo found: YES 1.40.12
Library m found: YES
Meson encountered an error in file plugins/nd/meson.build, line 79, column 4:
Subproject name must not contain a path separator.
The releases on Github don't contain the libgwater
and libnkutils
sources in them. I'd recommend using git-archive-all
to create the release tarballs.
Hello.
I am trying to make eventd's testsuite pass all tests, but relay-connection.test, libeventc-connection.test, and evp-connection.test fail all the time with Unable to bind the IP socket: Error binding to address: Cannot assign requested address
error.
Here's the build log: https://paste.pound-python.org/show/wVbbUgrQig2qFd0hGeaE/
Here's the test-suite.log: https://paste.pound-python.org/show/e0AP8psd9dawXRt0vo1r/
I'm probably missing something obvious.
Hey, I love eventd. Really awesome!
Humans are evolutionary trained to react to movement in their peripheral vision, after all it might be a tiger.
For this reason I really want my notification bubbles to slide in (or something) I don't care much what movement exactly, at least some of them. It is much stronger in getting attention, especially on a big screen. This should of course be optional per action.
Do you think, this would be doable?
I totally understand if you think this is outside the intended scope of the project.
I cannot seem to get the systemd unit to work under arch linux with the eventd-git
package from AUR.
I get the following output:
# aaa at noctis in ~
→ systemctl status eventd.service
● eventd.service - eventd
Loaded: loaded (/usr/lib/systemd/system/eventd.service; indirect; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2018-02-26 16:07:50 CET; 7s ago
Docs: man:eventd(1)
man:eventd.conf(5)
https://www.eventd.org/
Process: 8812 ExecStart=/usr/bin/eventd --listen systemd --system (code=exited, status=217/USER)
Main PID: 8812 (code=exited, status=217/USER)
Feb 26 16:07:50 noctis systemd[1]: Starting eventd...
Feb 26 16:07:50 noctis systemd[8812]: eventd.service: Failed to determine user credentials: No such process
Feb 26 16:07:50 noctis systemd[8812]: eventd.service: Failed at step USER spawning /usr/bin/eventd: No such >
Feb 26 16:07:50 noctis systemd[1]: eventd.service: Main process exited, code=exited, status=217/USER
Feb 26 16:07:50 noctis systemd[1]: eventd.service: Failed with result 'exit-code'.
Feb 26 16:07:50 noctis systemd[1]: Failed to start eventd.
I'm trying to install the latest version of eventd from the AUR but it fails to build with the following message:
plugins/nd/meson.build:86: WARNING: Subproject name has a path separator. This may cause unexpected behaviour.
plugins/nd/meson.build:85:4: ERROR: Neither a subproject directory nor a libgwater/xcb.wrap file was found.
A full log can be found at /home/jed/.cache/yay/eventd/src/build/meson-logs/meson-log.txt
I've uploaded the full meson-log.txt file in case it's of any help.
A cursory google search brings up a similar issue with rofi and meson 0.55 back in August that I think may be to blame here. I'm not very familiar with meson and I was wondering if there was going to be a fix at some point the future or if somebody could suggest a quick fix to get eventd to build?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.