GithubHelp home page GithubHelp logo

linuxerwang / rkflashkit Goto Github PK

View Code? Open in Web Editor NEW
210.0 33.0 74.0 678 KB

rkflashkit is an open source toolkit for flashing Linux kernel images to rockchip rk3066/rk3188/rk3288 etc. based devices. It's programmed with python and gtk2.

Python 100.00%
rockchip flashkit python gtk

rkflashkit's Introduction

rkflashkit

rkflashkit is an open sourced (GPL v2) toolkit for flashing Linux kernel images (Picuntu) to rk3066/rk3188/rk3288 based devices. It's programmed with python and gtk3. The kernel program is adapted from Galland's rkflashtool_rk3066 which is in turn based on cyteen's rk3066-rkflashtool.

rkflashkit talks to the devices through vpelletier's python-libusb1 which is a python wrapper of libusb. For convenience the python-libusb1 programs are included in rkflashkit. Also included is binary created for Ubuntu.

Features

  • Programmed with python, GTK3 and libusb1.
  • Automatically detect device connection.
  • Reboot device.
  • Flash kernel image file to specified partition.
  • Erase partition.
  • Backup partition. (New)
  • Compare a partition with a image file. (New)
  • Command line support. (New)

Change logs:

Release 0.1.5-dev:

  • Add support Python3.
  • Add support GTK3.

Release 0.1.4:

  • Add support for RK3128.
  • Add last partition ('-' in size) operation support.
  • Clean prompt and log messages.

Release 0.1.3:

  • Add support for RK3026/RK3028/RK3168.

Release 0.1.2:

  • Add command line support.

Release 0.1.1:

  • Sticky scrollbar in log view: when appending logs keep scrollbar at the bottom if it's already there.
  • Partition backup function.
  • Validation for flashing image file to partition.
  • Compare a partition with any image file.
  • Colored log messages.

Release 0.1.0:

  • Initial import.

Build

$ ./waf debian

Installation

Before installing the deb file please install its dependency:

$ sudo apt-get install python3-gi python3-libusb1

then

$ sudo dpkg -i rkflashkit_0.1.5_all.deb

You should be able to find an icon in unity dasher or gnome menu.

Links

https://github.com/Galland/rkflashtool_rk3066
https://github.com/cyteen/rk3066-rkflashtool
https://github.com/vpelletier/python-libusb1

Command line usage

  • List NAND Partitions

$ sudo rkflashkit part

  • Flash image

$ sudo rkflashkit flash @boot boot.img @resource resourse.img

  • Compare partition with image file

$ sudo rkflashkit cmp @boot boot.img

  • Backup partition

$ sudo rkflashkit backup @boot new_boot.img

  • Erase Partition

$ sudo rkflashkit erase @boot

  • Reboot Device

$ sudo rkflashkit reboot

Multiple commands can be specified at once:

$ sudo rkflashkit flash @boot boot.img @resource resourse.img reboot

rkflashkit's People

Contributors

eldarkg avatar ethanol6 avatar linuxerwang avatar mlxprojects avatar robertz2011 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rkflashkit's Issues

support RK3229

I have an Android TV with RK3229.

I can connect with adb without problems but sudo rkflashkit part not find my device.

How can I hep to add support for RK3229?

The id is 0x320b, as I see in the rkflashtool

 { 0x320b, "RK322X" }, // Both RK3228 and RK3229

How can I provide information to support this SOC?

rkflashkit

rkflashkit is an open sourced (GPL v2) toolkit for flashing Linux kernel images (Picuntu) to rk3066/rk3188/rk3288 based devices. It's programmed with python and gtk3. The kernel program is adapted from Galland's rkflashtool_rk3066 which is in turn based on cyteen's rk3066-rkflashtool.

rkflashkit talks to the devices through vpelletier's python-libusb1 which is a python wrapper of libusb. For convenience the python-libusb1 programs are included in rkflashkit. Also included is binary created for Ubuntu.

macOS build

Is there any way to have a build on macOS?

rkflashkit

rkflashkit is an open sourced (GPL v2) toolkit for flashing Linux kernel images (Picuntu) to rk3066/rk3188/rk3288 based devices. It's programmed with python and gtk3. The kernel program is adapted from Galland's rkflashtool_rk3066 which is in turn based on cyteen's rk3066-rkflashtool.

rkflashkit talks to the devices through vpelletier's python-libusb1 which is a python wrapper of libusb. For convenience the python-libusb1 programs are included in rkflashkit. Also included is binary created for Ubuntu.

./waf debian Node.py line 282 raises StopIteration

root@system:~/rkflashkit# ./waf debian
'debian' finished successfully (0.000s)
Setting top to                           : /root/rkflashkit 
Setting out to                           : /root/rkflashkit/build 
Checking for program python              : /usr/bin/python 
Checking for python version              : (3, 10, 6, 'final', 0) 
'configure' finished successfully (0.130s)
Traceback (most recent call last):
  File "/root/rkflashkit/.waf3-1.7.11-edc6ccb516c5e3f9b892efc9f53a610f/waflib/Node.py", line 282, in ant_iter
    raise StopIteration
StopIteration

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/root/rkflashkit/.waf3-1.7.11-edc6ccb516c5e3f9b892efc9f53a610f/waflib/Scripting.py", line 97, in waf_entry_point
    run_commands()
  File "/root/rkflashkit/.waf3-1.7.11-edc6ccb516c5e3f9b892efc9f53a610f/waflib/Scripting.py", line 153, in run_commands
    ctx=run_command(cmd_name)
  File "/root/rkflashkit/.waf3-1.7.11-edc6ccb516c5e3f9b892efc9f53a610f/waflib/Scripting.py", line 146, in run_command
    ctx.execute()
  File "/root/rkflashkit/.waf3-1.7.11-edc6ccb516c5e3f9b892efc9f53a610f/waflib/Scripting.py", line 351, in execute
    return execute_method(self)
  File "/root/rkflashkit/.waf3-1.7.11-edc6ccb516c5e3f9b892efc9f53a610f/waflib/Build.py", line 105, in execute
    self.load_envs()
  File "/root/rkflashkit/.waf3-1.7.11-edc6ccb516c5e3f9b892efc9f53a610f/waflib/Build.py", line 81, in load_envs
    lst=node.ant_glob('**/*%s'%CACHE_SUFFIX,quiet=True)
  File "/root/rkflashkit/.waf3-1.7.11-edc6ccb516c5e3f9b892efc9f53a610f/waflib/Node.py", line 331, in ant_glob
    ret=[x for x in self.ant_iter(accept=accept,pats=[to_pat(incl),to_pat(excl)],maxdepth=25,dir=dir,src=src,remove=kw.get('remove',True))]
  File "/root/rkflashkit/.waf3-1.7.11-edc6ccb516c5e3f9b892efc9f53a610f/waflib/Node.py", line 331, in <listcomp>
    ret=[x for x in self.ant_iter(accept=accept,pats=[to_pat(incl),to_pat(excl)],maxdepth=25,dir=dir,src=src,remove=kw.get('remove',True))]
RuntimeError: generator raised StopIteration

Support for RK3399

I'm trying to get my brand new RK3399 flashed
simply adding the missing device id 2207:330c didn't work, when I do a rkflashkit reboot, I get:

Found devices:
0x2207:0x330c
libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=2
Traceback (most recent call last):
  File "/usr/bin/rkflashkit", line 17, in <module>
    sys.exit(app.main(sys.argv[1:]))
  File "/usr/share/rkflashkit/lib/rkflashkit/climain.py", line 99, in main
    self.parse_and_execute(args)
  File "/usr/share/rkflashkit/lib/rkflashkit/climain.py", line 130, in parse_and_execute
    self.reboot()
  File "/usr/share/rkflashkit/lib/rkflashkit/climain.py", line 205, in reboot
    op.reboot()
  File "/usr/share/rkflashkit/lib/rkflashkit/rktalk.py", line 359, in reboot
    self.__init_device()
  File "/usr/share/rkflashkit/lib/rkflashkit/rktalk.py", line 128, in __init_device
    2, ''.join(prepare_cmd(0x80, 0x00060000, 0x00000000, 0x00000000)))
  File "/usr/share/rkflashkit/lib/rkflashkit/usb1.py", line 1145, in bulkWrite
    return self._bulkTransfer(endpoint, data, sizeof(data), timeout)
  File "/usr/share/rkflashkit/lib/rkflashkit/usb1.py", line 1129, in _bulkTransfer
    raise libusb1.USBError(result)
rkflashkit.libusb1.USBError: LIBUSB_ERROR_IO [-1]

rkflashkit

rkflashkit is an open sourced (GPL v2) toolkit for flashing Linux kernel images (Picuntu) to rk3066/rk3188/rk3288 based devices. It's programmed with python and gtk3. The kernel program is adapted from Galland's rkflashtool_rk3066 which is in turn based on cyteen's rk3066-rkflashtool.

rkflashkit talks to the devices through vpelletier's python-libusb1 which is a python wrapper of libusb. For convenience the python-libusb1 programs are included in rkflashkit. Also included is binary created for Ubuntu.

Flash memory at 0x%08x is differnt from file!

Hello,

Whats the meaning of "Flash memory at 0x%08x is differnt from file!" ?

All flash (system.img or boot.img etc) return this error. Even with "erase partition".

Some help ?

Thank you

LIBUSB_ERROR_IO [-1]

Hi.

I was trying to use your rkflashkit for RK3568 chip board
I tried it on Ubuntu 22.04 LTS at the first time, however, it was failed to build with "/waf debian Node.py line 282 raises StopIteration"
error message.

SO, I downgraded my Ubuntu to 18.04 LTS and I succeeded to build rkflashkit.deb and install it.
But, the thing is I added PID for RK3568, which is 0x2207:0x350a, and it worked though LIBUSB_ERROR_IO [-1] error came up.
//
Found devices:
0x2207:0x350a
libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=2
Traceback (most recent call last):
File "/usr/bin/rkflashkit", line 17, in
sys.exit(app.main(sys.argv[1:]))
File "/usr/share/rkflashkit/lib/rkflashkit/climain.py", line 99, in main
self.parse_and_execute(args)
File "/usr/share/rkflashkit/lib/rkflashkit/climain.py", line 106, in parse_and_execute
self.load_partitions()
File "/usr/share/rkflashkit/lib/rkflashkit/climain.py", line 157, in load_partitions
loaded_parts = op.load_partitions()
File "/usr/share/rkflashkit/lib/rkflashkit/rktalk.py", line 194, in load_partitions
self.__init_device()
File "/usr/share/rkflashkit/lib/rkflashkit/rktalk.py", line 154, in __init_device
prepare_cmd(0x80, 0x00060000, 0x00000000, 0x00000000))
File "/usr/share/rkflashkit/lib/rkflashkit/usb1.py", line 1145, in bulkWrite
return self._bulkTransfer(endpoint, data, sizeof(data), timeout)
File "/usr/share/rkflashkit/lib/rkflashkit/usb1.py", line 1129, in _bulkTransfer
raise libusb1.USBError(result)
rkflashkit.libusb1.USBError: LIBUSB_ERROR_IO [-1]
//

  1. How can I solve this LIBUSB_ERROR_IO [-1] error?
  2. Can you support RK3568 chip for rkflashkit?

rkflashkit.libusb1.USBError: LIBUSB_ERROR_IO [-1]

Tried to use this with a Retron 5 with an rk3066 on Ubuntu 20.04. Here's what I see when starting the GUI from the command line:

Traceback (most recent call last):
File "/usr/share/rkflashkit/lib/rkflashkit/main.py", line 395, in __on_device_changed
partitions = op.load_partitions()
File "/usr/share/rkflashkit/lib/rkflashkit/rktalk.py", line 192, in load_partitions
self.__init_device()
File "/usr/share/rkflashkit/lib/rkflashkit/rktalk.py", line 152, in __init_device
prepare_cmd(0x80, 0x00060000, 0x00000000, 0x00000000))
File "/usr/share/rkflashkit/lib/rkflashkit/usb1.py", line 1145, in bulkWrite
return self._bulkTransfer(endpoint, data, sizeof(data), timeout)
File "/usr/share/rkflashkit/lib/rkflashkit/usb1.py", line 1129, in _bulkTransfer
raise libusb1.USBError(result)
rkflashkit.libusb1.USBError: LIBUSB_ERROR_IO [-1]

The device shows up, but nothing under NAND partitions. I will admit I am an amateur, so if there is some other way I should submit this or it is a "user error" sort of situation, just let me know. Thanks!

0.1.5-dev not working flash

I made a backup of the u-boot partition, cleared the partition, tried to write it. As a result, such an error:

Traceback (most recent call last):
File "/usr/lib/python3/site-packages/usb1/init.py", line 282, in create_initialised_buffer
return string_type.from_buffer(init), init
TypeError: memoryview: a bytes-like object is required, not 'str'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/site-packages/rkflashkit/main.py", line 278, in __flash_image_file
op.flash_image_file(offset, size, image_file)
File "/usr/lib/python3/site-packages/rkflashkit/rktalk.py", line 306, in flash_image_file
self.__flash_image_file(offset, size, fh)
File "/usr/lib/python3/site-packages/rkflashkit/rktalk.py", line 289, in __flash_image_file
self.__dev_handle.bulkWrite(self.__write_endpoint, str(buf))
File "/usr/lib/python3/site-packages/usb1/init.py", line 1500, in bulkWrite
data, _ = create_initialised_buffer(data)
File "/usr/lib/python3/site-packages/usb1/init.py", line 286, in create_initialised_buffer
init = bytearray(init)
TypeError: string argument without an encoding

rkflashkit.libusb1.USBError: LIBUSB_ERROR_NO_DEVICE [-4]

After unsuccesfull upgrade from windows im trying way to make stick again working. Seems that NAND was overwriten. Using MK802IIIS. This is output when im using tool in recovery mode. Windows cant detect USB. Error 43.

============= 2016-10-24 17:09:40 ============

Reading flash information
Loading partition information

Traceback (most recent call last):
File "./run.py", line 17, in
sys.exit(app.main(sys.argv[1:]))
File "/root/rkflashkit/src/rkflashkit/climain.py", line 99, in main
self.parse_and_execute(args)
File "/root/rkflashkit/src/rkflashkit/climain.py", line 106, in parse_and_execute
self.load_partitions()
File "/root/rkflashkit/src/rkflashkit/climain.py", line 156, in load_partitions
loaded_parts = op.load_partitions()
File "/root/rkflashkit/src/rkflashkit/rktalk.py", line 180, in load_partitions
content = self.__dev_handle.bulkRead(1, PART_BLOCKSIZE)
File "/root/rkflashkit/src/rkflashkit/usb1.py", line 1159, in bulkRead
transferred = self._bulkTransfer(endpoint, data, length, timeout)
File "/root/rkflashkit/src/rkflashkit/usb1.py", line 1129, in _bulkTransfer
raise libusb1.USBError(result)
rkflashkit.libusb1.USBError: LIBUSB_ERROR_NO_DEVICE [-4]

Please add this product ID

in -> /usr/share/rkflashkit/lib/rkflashkit/rktalk.py
in section : RK_PRODUCT_IDS = set([

0x292a, # rk2928sdk


for info :

Loading partition information
MACHINE_MODEL:rk2928sdk
MACHINE_ID:007
MANUFACTURER:RK2928SDK
MAGIC: 0x5041524B
ATAG: 0x60000800
MACHINE: 2928 
CHECK_MASK: 0x80
KERNEL_IMG: 0x60408000
CMDLINE:console=ttyFIQ0 androidboot.console=ttyFIQ0 init=/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00001380@0x00000080(kernel),0x0000200@0x00001400(boot),0x0000400@0x00001600(userdata),0x00e600@0x00001a00(system),0x0000008@0x10000(backup)

./waf debian Error in WSL

When running ./waf debian
I Got the following error message:

Creating debian package ...
fakeroot, while creating message channels: Function not implemented
This may be due to a lack of SYSV IPC support.
fakeroot: error while starting the `faked' daemon.

在WSL下尝试执行./waf debian时得到了没有fakeroot的报错,请问如何绕过

Does not find partition with unspecified size

My command like looks like this:
CMDLINE: initrd=0x62000000,0x00800000 init=/sbin/init root=/dev/mtdblock2 mtdparts=rk29xxnand:0x00008000@0x00002000(boot),0x00008000@0x0000A000(kernel),-@0x00012000(system)

rkflashkit correctly finds boot and kernel partitions but does not see the system partition because the size is unspecified "-" (or perhaps syntax this implies "everything else", I am not sure).

The regular expression for discovering partitions in the command line clearly expects a 0x([0-9a-fA-F]?)@(0x[0-9a-fA-F]?) which does not appear to allow for a "-" before the @. I am sure the fix involves more than just to "or" in the "-" to the size part of the regular expression as one either needs to ask the user to specify the partition size or figure it out from the total NAND size.

fedora support?

Cant use program on Fedora 27:

'debian' finished successfully (0.000s)
Setting top to                           : /data/install/android/PIPO_m9_pro/rkflashkit
Setting out to                           : /data/install/android/PIPO_m9_pro/rkflashkit/build
Checking for program python              : /usr/bin/python
Checking for python version              : (2, 7, 14, 'final', 0)
'configure' finished successfully (0.088s)
Waf: Entering directory `/data/install/android/PIPO_m9_pro/rkflashkit/build'
Waf: Leaving directory `/data/install/android/PIPO_m9_pro/rkflashkit/build'
'build' finished successfully (0.007s)
Waf: Entering directory `/data/install/android/PIPO_m9_pro/rkflashkit/build'
- install debian/usr/share/rkflashkit/lib/rkflashkit/__init__.py (from src/rkflashkit/__init__.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/climain.py (from src/rkflashkit/climain.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/libusb1.py (from src/rkflashkit/libusb1.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/main.py (from src/rkflashkit/main.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/rkcrc.py (from src/rkflashkit/rkcrc.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/rktalk.py (from src/rkflashkit/rktalk.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/usb1.py (from src/rkflashkit/usb1.py)
Waf: Leaving directory `/data/install/android/PIPO_m9_pro/rkflashkit/build'
- install debian/usr/share/rkflashkit/lib/rkflashkit/__init__.py (from src/rkflashkit/__init__.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/climain.py (from src/rkflashkit/climain.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/libusb1.py (from src/rkflashkit/libusb1.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/main.py (from src/rkflashkit/main.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/rkcrc.py (from src/rkflashkit/rkcrc.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/rktalk.py (from src/rkflashkit/rktalk.py)
- install debian/usr/share/rkflashkit/lib/rkflashkit/usb1.py (from src/rkflashkit/usb1.py)
'install' finished successfully (0.012s)
Creating debian package ...
'chmod' finished successfully (0.008s)
Creating debian package ...
/usr/bin/fakeroot: line 178: dpkg: command not found
'build_debian' finished successfully (0.020s)

"libusb: error [_get_usbfs_fd] libusb couldn't open USB device"

On Ubuntu 16.04, latest rkflashkit version from the github as root
Device RK3188 is detected:

============= 2018-10-01 13:52:31 ============

Loading partition information
MACHINE_MODEL:rk3188
MACHINE_ID:007
MANUFACTURER:RK30SDK
MAGIC: 0x5041524B
ATAG: 0x60000800
MACHINE: 3066
CHECK_MASK: 0x80
KERNEL_IMG: 0x60408000
#RECOVER_KEY: 1,1,0,20,0
CMDLINE:console=ttyFIQ0 androidboot.console=ttyFIQ0 init=/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00002000@0x00002000(misc),0x00006000@0x00004000(kernel),0x00006000@0x0000a000(boot),0x00010000@0x00010000(recovery),0x00020000@0x00020000(backup),0x00040000@0x00040000(cache),0x003FE000@0x00080000(userdata),0x00002000@0x0047E000(metadata),0x00002000@0x00480000(kpanic),0x00180000@0x00482000(system),-@0x00602000(user)

Error in console when running any partition operation:

libusb: error [_get_usbfs_fd] libusb couldn't open USB device /dev/bus/usb/001/052: No such device
Traceback (most recent call last):
File "/usr/share/rkflashkit/lib/rkflashkit/main.py", line 275, in __flash_image_file
op = rktalk.RkOperation(self.__logger, device_info[0], device_info[1])
File "/usr/share/rkflashkit/lib/rkflashkit/rktalk.py", line 102, in init
self.__dev_handle = device.open()
File "/usr/share/rkflashkit/lib/rkflashkit/usb1.py", line 1622, in open
raise libusb1.USBError(result)
rkflashkit.libusb1.USBError: LIBUSB_ERROR_IO [-1]
^CTraceback (most recent call last):
File "/usr/bin/rkflashkit", line 21, in
app.main()
File "/usr/share/rkflashkit/lib/rkflashkit/main.py", line 421, in main
gtk.main()

Any ideas on why this error or how to debug this issue?

`LIBUSB_ERROR_IO [-1]`

When trying to connect to a RK3188.

Traceback (most recent call last):
  File "/home/anubis/git/rkflashkit/src/rkflashkit/main.py", line 393, in __on_device_changed
    partitions = op.load_partitions()
  File "/home/anubis/git/rkflashkit/src/rkflashkit/rktalk.py", line 190, in load_partitions
    self.__init_device()
  File "/home/anubis/git/rkflashkit/src/rkflashkit/rktalk.py", line 150, in __init_device
    ''.join(prepare_cmd(0x80, 0x00060000, 0x00000000, 0x00000000)))
  File "/home/anubis/git/rkflashkit/src/rkflashkit/usb1.py", line 1145, in bulkWrite
    return self._bulkTransfer(endpoint, data, sizeof(data), timeout)
  File "/home/anubis/git/rkflashkit/src/rkflashkit/usb1.py", line 1129, in _bulkTransfer
    raise libusb1.USBError(result)
rkflashkit.libusb1.USBError: LIBUSB_ERROR_IO [-1]

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.