Giter Site home page Giter Site logo

tuomasjjrasanen / python-uinput Goto Github PK

View Code? Open in Web Editor NEW
289.0 17.0 71.0 389 KB

Pythonic API to Linux uinput module

Home Page: http://tjjr.fi/sw/python-uinput/

License: GNU General Public License v3.0

Python 57.53% Makefile 1.44% C 40.15% Shell 0.10% M4 0.78%

python-uinput's Introduction

Python-uinput

Python-uinput is Python interface to Linux uinput kernel module which allows attaching userspace device drivers into kernel. In practice, Python-uinput makes it dead simple to create virtual joysticks, keyboards and mice for generating arbitrary input events programmatically.

Homepage

http://tjjr.fi/sw/python-uinput/

License

GPLv3+

Usage examples

Generate keyboard clicks

import uinput

with uinput.Device([uinput.KEY_E, uinput.KEY_H,
                    uinput.KEY_L, uinput.KEY_O]) as device:
    device.emit_click(uinput.KEY_H)
    device.emit_click(uinput.KEY_E)
    device.emit_click(uinput.KEY_L)
    device.emit_click(uinput.KEY_L)
    device.emit_click(uinput.KEY_O)

Move mouse cursor

import uinput

with uinput.Device([uinput.REL_X, uinput.REL_Y,
                    uinput.BTN_LEFT, uinput.BTN_RIGHT]) as device:
    for i in range(20):
        device.emit(uinput.REL_X, 5)
        device.emit(uinput.REL_Y, 5)

Generate keyboard combinations

import uinput

with uinput.Device([uinput.KEY_LEFTALT, uinput.KEY_TAB]) as device:
    device.emit_combo([uinput.KEY_LEFTALT, uinput.KEY_TAB])

See examples/ for other kind of example devices (keyboard, joystick).

Note that you must have the uinput kernel module loaded to use python-uinput. To load the module, run:

modprobe -i uinput

If you would like to have uinput to be loaded on every sytem boot, add uinput to /etc/modules.

How to install

Just run the following commands:

python setup.py build
python setup.py install

How to report bugs

The bug database is hosted in GitHub. If you have found a bug or have an improvement idea you want to share, please report it at <https://github.com/tuomasjjrasanen/python-uinput/issues>. However, to avoid duplicate bug reports, before reporting, please check if similar or identical bug has already been reported. If so, you can still subscribe to the existing bug to track its progress.

How to contribute

In addition to reporting bugs and improvement suggestions, you are encouraged to contribute bug-fixes or features. The source code is maintained in Git and the main repository is hosted at GitHub, <https://github.com/tuomasjjrasanen/python-uinput/>. The preferred way to contribute code is to clone the main Git repository and send a pull-request. Good old patches via email are also accepted.

How to copy

Python-uinput is free (libre) software and licensed under the terms of GNU Public License version 3 or later. In short, it means that you are free to copy, modify and redistribute this software as long as you place the derivative work under a compatible license. See COPYING for details.

python-uinput's People

Contributors

eemikula avatar esamattis avatar fabiand avatar goncalopp avatar jumplink avatar maurin avatar timlyo avatar tuomasjjrasanen avatar vincentbernat avatar

Stargazers

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

Watchers

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

python-uinput's Issues

When using button A, B, X, Y uinput crashes.

As stated above,

BTN_SOUTH = (0x01, 0x130)
BTN_A = (0x01, BTN_SOUTH)
BTN_EAST = (0x01, 0x131)
BTN_B = (0x01, BTN_EAST)
BTN_C = (0x01, 0x132)
BTN_NORTH = (0x01, 0x133)
BTN_X = (0x01, BTN_NORTH)
BTN_WEST = (0x01, 0x134)
BTN_Y = (0x01, BTN_WEST)
BTN_Z = (0x01, 0x135)

Your code under init on parsing of the inputs:

       for ev_spec in self.__events:
            ev_type, ev_code = ev_spec[:2]

BTN_A will be (0x01, (0x01, 0x130)) which crashes the system on that line. Dont know how that is fixed, you probably do +1

Advance Mame

Doesn't work with console Advance Mame on Raspberry Pi. I'm not sure why but key press/release event may be happening too quickly and is being missed by console Advance Mame (No X or SDL) entirely. Works fines with other Raspberry Pu console programs.

List of possible keys?

Hello!
I love this library because it's very simple and easy!

But I've been searching, but haven't found any list of all the possible keys that you can emulate with it... Like is scroll possible and something like KEY_ENTER?

Thanks!

Extended characters

Is there any way to emit extended characters, like ç, ã, ø, å ?
It doesn't seem feasible by looking at the code in my limited understanding.

By the way, nice work! Quite useful module for my application.

Thanks!

Compilation Error in Ubuntu 14.04 64-bit

When running the command python setup.py build, compiler returns an error, stating "Cannot open shared object file libudev.so".

The problem appears to be the caused by the replacement of libudev.so with libudev.so.0 (older version with deprecated interface which may not exist in current libudev builds) and libudev.so.1 (new version being supported) as part of its merge into systemd.

This error was hotfixed by replacing "libudev.so" in setup.py with "libudev.so.1", but requires further testing to determine full cross-compatibility.

Process /usr/sbin/th-cmd failed with exit code 1

I've been trying to run the example keyboard script on a Raspberry Pi 3B+ running Raspbian Stretch (both as root and as a normal user, with /dev/uinput set temporarily to +0666 for testing), but I don't get the scripted keyboard events. A quick check of /var/log/syslog reveals the following occurs when the script is run:

systemd-udevd[987]: Process '/usr/sbin/th-cmd --socket /var/run/thd.socket --passfd --udev' failed with exit code 1.

Any thoughts? Sorry for the trouble, and many thanks.

python-uinput2 (fork)

I'd like to announce the creation of python-uinput2

This is a continuation of the great work done by Tuomas and others, with the following goals:

  • API stability and retro-compatibility
  • Modern python support (3.12+)
  • Keeping support for old python releases until it becomes a significant burden (2.7 is currently supported)

Why a Fork?

We have decided to fork the original project due to the accumulation of issues, contributions and PRs.

In Tuomas' words: tempus edax rerum

Contributions

Most of the outstanding issues / PRs for python-uinput (1) have already been integrated. We welcome bug reports, contributions and new maintainers.

Compatibility

Existing code will keep working with no changes (including import statements).
Note that the package name changed to python-uinput2 (available through pip / pypi).

Gratitude

I'd like to express my great gratitude for all the work that Tuomas and other contributors put into the software. The fact that it simply keeps working after 8 years with no updates is a testament to how well written it is.

Project unmaintained?

@tuomasjjrasanen Could you please let us know if you are still maintaining this project?

There are a few good pull requests that are unmerged, and uncoordinated forks have been popping up.

I'm happy to help with project maintenance on this repo, or doing a more coordinated forking with the rest of the community.

xinput doesn't display devices with custom capabilities

So I'm trying to simulate a stylus like this:

vd = uinput.Device([
    uinput.ABS_X,
    uinput.ABS_Y,
    uinput.ABS_PRESSURE,
    uinput.ABS_DISTANCE,
    uinput.ABS_TILT_X,
    uinput.ABS_TILT_Y,
])

and xinput doesn't display it. However if I replace these capabilities with a mouse's capabilities the device gets displayed.
Seems like there are only certain configurations possible and I haven't figured out yet which they are and how to add more.

Anyone get joystick working?

I can get keyboard and mouse working, and have a xbox360 as joystick, it can control games like torcs and flightgear, but cannot get it working here.
Also, seems no js0 js1.. specified,

Custom button mapping?

Hi, It's me again! :D

I have mapped the buttons ABXY on a jstest it shows:

Axes: 0:-32767 1:-32767 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off

Where:
0 = BTN_JOYSTICK
1 = BTN_A
2 = BTN_B
3 = BTN_Y
4 = BTN_X

But on my xbox controller its correct:

0 = BTN_A
1 = BTN_B
2 = BTN_X
3 = BTN_Y

Would love it to be mapped in order of "events" or something so you can customize it? :)

Dead/Abandoned repo?

I see no acivity on tickets and a few pending pull request, I like to know the project status or if there is an alternate repo from someone that is continuing this work.

Cannot find any documentation

Is there any? Or is potential user supposed to understand the lib's possibilities, options, advanced usage etc using only comments on your website, those 3 short examples and couple hours getting to know it?

Can't even include library

No matter where I include the lib, it always has the same error...
Traceback (most recent call last):
File "joystick.py", line 1, in
import uinput
File "/usr/lib/python2.7/site-packages/uinput/init.py", line 42, in
_ABS_CNT = ABS_MAX[1] + 1
NameError: name 'ABS_MAX' is not defined

Lack of button support?

Hi.

I love how this work but i'd love it to have more button support? Where is the limitation on this? I mean there are buttons e.g. BTN_TR, BTN_A, BTN_THUMB?

Reason i ask is because i have made my own "controller" and want to use uinput as a driver for it, and i cant get it to act like my xbox usb controller? Mapping buttons like top left trigger e.t.c?

Are uinput the limitation?

python-uinput mouse clicks don't work with libinput

UPDATE: SEE LATEST COMMENT

I'm not exactly sure what's going wrong, but python-uinput seems to be not outputting mouse commands on my machine (Ubuntu 18.10). Keyboard commands all work,.

I've downloaded master and run python setup.py build/install, so I'll be debugging it on my end, but any suggestions as to causes, solutions, or things to investigate would be greatly appreciated.

MVP:
>>> import uinput
>>> events = (uinput.BTN_LEFT,)
>>> device = uinput.Device(events)
>>> device.emit_click(uinput.BTN_LEFT)
(expect left click, get nothing)

via /proc/bus/input/devices:
II: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="python-uinput"
P: Phys=
S: Sysfs=/devices/virtual/input/input54
U: Uniq=
H: Handlers=event259
B: PROP=0
B: EV=3
B: KEY=10000 0 0 0 0

failing to create output using examples on Debian Stretch

Hello,
Sorry if this is "user error" I'm still learning python and trying to learn by doing a project.

I've looked at the joystick and example and then it failed to provide me with /dev/input/js4 or other device in the KDE joystick manager.
so I tried to use the example for the keyboard

import uinput

device = uinput.Device([
        uinput.KEY_E,
        uinput.KEY_H,
        uinput.KEY_L,
        uinput.KEY_O,
        ])

device.emit_click(uinput.KEY_H)
device.emit_click(uinput.KEY_E)
device.emit_click(uinput.KEY_L)
device.emit_click(uinput.KEY_L)
device.emit_click(uinput.KEY_O)

and I was expecting this to output Hello on my terminal
but I'm getting nothing, no errors or output.

I don't know how to get more debugging information out of python at the moment.

Can't import uinput because name 'ABS_MAX' is not defined

I'm sure I must be doing something wrong. I'm attempting to run the examples and I get this error:

Traceback (most recent call last):
File "mouse.py", line 3, in
import uinput
File "/usr/lib/python2.7/site-packages/uinput/init.py", line 42, in
_ABS_CNT = ABS_MAX[1] + 1
NameError: name 'ABS_MAX' is not defined

I'm on Arch and I've tried python3 and 2

sysconfig.get_config_var("SO") deprecated and removed in python 3.11

sysconfig.get_config_var("SO") is used in init.py:

_libsuinput_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "_libsuinput" + sysconfig.get_config_var("SO")))

but returns None in python 3.11:

python --version
Python 3.11.3

python
Python 3.11.3 (main, Apr  5 2023, 15:52:25) [GCC 12.2.1 20230201] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sysconfig
>>> print(sysconfig.get_config_var("SO"))
None

leading to errors like:

Traceback (most recent call last):
  File "/usr/lib/keyboard-center/main.py", line 8, in <module>
    from mainUi import MainWindow
  File "/usr/lib/keyboard-center/mainUi.py", line 23, in <module>
    from devices.keyboard import SUPPORTED_DEVICES, KeyboardInterface
  File "/usr/lib/keyboard-center/devices/keyboard.py", line 1, in <module>
    import uinput
  File "/usr/lib/python3.11/site-packages/uinput/__init__.py", line 86, in <module>
    _libsuinput_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "_libsuinput" + sysconfig.get_config_var("SO")))
                                                                                     ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TypeError: can only concatenate str (not "NoneType") to str

To fix change to

sysconfig.get_config_var("EXT_SUFFIX")

how to make ABS_X and ABS_Y attributes work with mouse pointer movement

I would like to make the mouse pointer/cursor move independently and directly to the given x and y positions without the need to use the relative attributes (REL_X, REL_Y) seen that these two ones make the mouse movement using as reference the actual x and y positions. I wrote this script below to try make the mouse pointer goes directly but nothing happens.

import uinput
from time import sleep


def createDevice():
    device = uinput.Device([
        uinput.ABS_X,
        uinput.ABS_Y,
        uinput.BTN_LEFT,
        uinput.BTN_RIGHT,
        ])
    return device

def emitActions(device):
    sleep(1)
    device.emit(uinput.ABS_X, 26, syn=False)
    sleep(1)
    device.emit(uinput.ABS_Y, 665, syn=False)
    sleep(1)
    device.syn()
    sleep(1)
    device.emit(uinput.BTN_LEFT, 1)
    sleep(1)
    device.emit(uinput.BTN_LEFT, 0)

def main():
    dev = createDevice()
    emitActions(dev)

if __name__ == "__main__":
    main()

When I debugged this code I didn't get errors, but I would like to know what's missing there in this code to make that the mouse pointer goes to the desired x and y positions?

uinput example doesn't work under ubuntu 14.04

Hi!

I've been able to install uinput by following comments on this issue [https://github.com//issues/3] and I wanted to try the library.

After a copy&paste on a new file, I've started (or at least I think so) uinput kernel module (I've tried with modprobe uinput, modprobe -i uinput and sudo modprobe -i uinput.

When I run the file with the keyboard example a error appears:

~/Keyboard emulator/python script/$ python keyboard-emulator.py
Traceback (most recent call last):
File "keyboard-emulator.py", line 4, in
with uinput.Device([uinput.KEY_E, uinput.KEY_H,uinput.KEY_L, uinput.KEY_O]) as device:
File "/usr/local/lib/python2.7/dist-packages/uinput/init.py", line 175, in init
self.uinput_fd = _libsuinput.suinput_open()
File "/usr/local/lib/python2.7/dist-packages/uinput/__init
.py", line 70, in _open_error_handler
raise OSError(code, msg)
OSError: [Errno 13] Failed to open the uinput device: Permission denied

If I use sudo, there is no error, but there is also no visible input. I think there is maybe some issue with terminal, so I've added a 5 seconds delay and moved to a text editor but still nothing.

I've tried also the mouse example, but the same errors appears.

What should I do?

Thanks!

uinput joystick not detected by Pygame

My code:

  
import uinput

def main():
    events = (
        uinput.BTN_JOYSTICK,
        uinput.ABS_X + (0, 255, 0, 0),
        uinput.ABS_Y + (0, 255, 0, 0),
        )

    with uinput.Device(events) as device:
        while True:
            # syn=False to emit an "atomic" (5, 5) event.
            device.emit(uinput.ABS_X, 5, syn=False)
            device.emit(uinput.ABS_Y, 5)
            device.emit_click(uinput.BTN_JOYSTICK)

if __name__ == "__main__":
    main()

How to do scrolling?

I tried SCROLLUP and SCROLLDOWN key without success. I presume there are extra parameters necessary to make this work, but I do not see a special case to provide these.

Works in interactive shell, not via script

Same code works in an interactive shell, but not sudo python keypress.py start
no errors, just not expected beahviour

import uinput
import sys

arg = sys.argv[1]

if arg == 'start':
    print('ENTER press')
    device = uinput.Device([uinput.KEY_ENTER]); device.emit(uinput.KEY_ENTER, 1)
elif arg == 'select':
    print('SELECT press')
elif arg == 'exit':
    print('SHIFT/ESCAPE press')
    device = uinput.Device([uinput.KEY_LEFTSHIFT, uinput.KEY_ESC]); device.emit(uinput.KEY_LEFTSHIFT, 1); device.emit(uinput.KEY_ESC, 1)

missing quotedbl

I don't seem to be able to generate the " character. The keysym "quotedbl" used by TK doesn't exist. I checked input.h but I can't find it there either.

What am I missing?

wrong keyboard mapping

This script, based on the provided keyboard example:

import time
import uinput

def main():
    events = (uinput.KEY_A, uinput.KEY_Z,)

    with uinput.Device(events) as device:
        time.sleep(1) 
        device.emit_click(uinput.KEY_A)
        device.emit_click(uinput.KEY_Z)

if __name__ == "__main__":
    main()

... produce qw instead of az.

I use an Azerty keyboard.

[Issue] Can't install uinput on OpenSuse Tumbleweed

Hello guys,

I've tried to install python-uinput manually and automatically via pip, but neither of these options worked;
When execute sudo pip install python-uinput
I receive the following error:

$ sudo pip install python-uinput
Collecting python-uinput
  Using cached https://files.pythonhosted.org/packages/54/b7/be7d0e8bbbbd440fef31242974d92d4edd21eb95ed96078b18cf207c7ccb/python-uinput-0.11.2.tar.gz
Installing collected packages: python-uinput
  Running setup.py install for python-uinput ... error
    Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-e7gyxby9/python-uinput/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-zx1wj8ct/install-record.txt --single-version-externally-managed --compile:
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.7
    creating build/lib.linux-x86_64-3.7/uinput
    copying src/ev.py -> build/lib.linux-x86_64-3.7/uinput
    copying src/__init__.py -> build/lib.linux-x86_64-3.7/uinput
    running build_ext
    building '_libsuinput' extension
    creating build/temp.linux-x86_64-3.7
    creating build/temp.linux-x86_64-3.7/libsuinput
    creating build/temp.linux-x86_64-3.7/libsuinput/src
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g -DOPENSSL_LOAD_CONF -fwrapv -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g -fPIC -I/usr/include/python3.7m -c libsuinput/src/suinput.c -o build/temp.linux-x86_64-3.7/libsuinput/src/suinput.o
    gcc -pthread -shared build/temp.linux-x86_64-3.7/libsuinput/src/suinput.o -L/usr/lib64 -l:libudev.so.1 -lpython3.7m -o build/lib.linux-x86_64-3.7/_libsuinput.cpython-37m-x86_64-linux-gnu.so
    /usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: cannot find -lpython3.7m
    collect2: error: ld returned 1 exit status
    error: command 'gcc' failed with exit status 1
    
    ----------------------------------------
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-e7gyxby9/python-uinput/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-zx1wj8ct/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-install-e7gyxby9/python-uinput/

When trying to compile it manually, this error is shown with Python3:

$ python setup.py build
running build
running build_py
running build_ext
building '_libsuinput' extension
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g -DOPENSSL_LOAD_CONF -fwrapv -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g -fPIC -I/usr/include/python3.7m -c libsuinput/src/suinput.c -o build/temp.linux-x86_64-3.7/libsuinput/src/suinput.o
gcc -pthread -shared build/temp.linux-x86_64-3.7/libsuinput/src/suinput.o -L/usr/lib64 -l:libudev.so.1 -lpython3.7m -o build/lib.linux-x86_64-3.7/_libsuinput.cpython-37m-x86_64-linux-gnu.so
/usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: cannot find -lpython3.7m
collect2: error: ld returned 1 exit status
error: command 'gcc' failed with exit status 1

With python 2:

$ python setup.py build
running build
running build_py
running build_ext
building '_libsuinput' extension
gcc -pthread -fno-strict-aliasing -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g -DNDEBUG -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g -DOPENSSL_LOAD_CONF -fwrapv -fPIC -I/usr/include/python2.7 -c libsuinput/src/suinput.c -o build/temp.linux-x86_64-2.7/libsuinput/src/suinput.o
gcc -pthread -shared build/temp.linux-x86_64-2.7/libsuinput/src/suinput.o -L/usr/lib64 -l:libudev.so.1 -lpython2.7 -o build/lib.linux-x86_64-2.7/_libsuinput.so
/usr/lib64/gcc/x86_64-suse-linux/8/../../../../x86_64-suse-linux/bin/ld: cannot find -lpython2.7
collect2: error: ld returned 1 exit status
error: command 'gcc' failed with exit status 1

Does anyone know how to fix that?

I'm running kernel 5.0.3.

Thanks in advance!
Cheers!

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.