Coder Social home page Coder Social logo

denysvitali / linux-on-pixel-c Goto Github PK

View Code? Open in Web Editor NEW
61.0 15.0 5.0 46.66 MB

Documentation on how to run a Linux Distro on the Google Pixel C (2015)

License: MIT License

Shell 100.00%
pixel-c google pixel c arch linux kernel tegra tegra210 archlinux

linux-on-pixel-c's Issues

Sound doesn't work

Sound deosn't work: I'm pretty sure some files in the kernel source are missing. We probably need to copy them over from linux-tegra and enable the related options

Physical buttons don't work

I'm pretty sure it is an error caused by libevent, that doesn't recognize the Power, Vol +, Vol - events.
Apparently they work in GNOME (or they were working at some point).

GPIO:

[root@pixel-c ~]# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-255, parent: platform/6000d000.gpio, tegra-gpio:
 gpio-12  (                    |Lid                 ) in  hi IRQ
 gpio-83  (                    |PP1800_CAM          ) out lo    
 gpio-100 (                    |Volume Up           ) in  hi IRQ
 gpio-169 (                    |jdi-enable          ) out hi    
 gpio-170 (                    |jdi-reset           ) out hi    
 gpio-171 (                    |PP1800_LCDIO        ) out hi    
 gpio-172 (                    |PPLCD_VDD           ) out hi    
 gpio-189 (                    |Power               ) in  hi IRQ
 gpio-191 (                    |Volume Down         ) in  hi IRQ
 gpio-202 (                    |Tablet Mode         ) in  hi IRQ

Evtest output

Testing ... (interrupt to exit)
Event: time 1502312217.717873, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 1
Event: time 1502312217.717873, -------------- SYN_REPORT ------------
Event: time 1502312217.907894, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 0
Event: time 1502312217.907894, -------------- SYN_REPORT ------------
Event: time 1502312219.631962, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 1
Event: time 1502312219.631962, -------------- SYN_REPORT ------------
Event: time 1502312219.813930, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 0
Event: time 1502312219.813930, -------------- SYN_REPORT ------------
Event: time 1502312222.179026, type 1 (EV_KEY), code 116 (KEY_POWER), value 1
Event: time 1502312222.179026, -------------- SYN_REPORT ------------
Connection to 192.168.1.80 closed by remote host.
Connection to 192.168.1.80 closed.

Graphics Acceleration Is Missing

Currently Linux on Pixel C is missing GPU Acceleration, therefore the UI is laggy
dmesg is available here

[root@alarm /]# cat /var/log/Xorg.0.log
[   899.733] 
X.Org X Server 1.19.3
Release Date: 2017-03-15
[   899.733] X Protocol Version 11, Revision 0
[   899.733] Build Operating System: Linux 3.14.65-16-ARCH aarch64 
[   899.733] Current Operating System: Linux alarm 4.13.0-rc4+ #13 SMP PREEMPT Wed Aug 9 20:46:38 UTC 2017 aarch64
[   899.733] Kernel command line: cros_secure vpr=0x08000000@0xf6800000 earlycon
[   899.733] Build Date: 13 August 2017  04:10:10PM
[   899.733]  
[   899.733] Current version of pixman: 0.34.0
[   899.733]    Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.
[   899.733] Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[   899.733] (==) Log file: "/var/log/Xorg.0.log", Time: Wed Aug 16 12:00:35 2017
[   899.734] (==) Using system config directory "/usr/share/X11/xorg.conf.d"
[   899.734] (==) No Layout section.  Using the first Screen section.
[   899.734] (==) No screen section available. Using defaults.
[   899.734] (**) |-->Screen "Default Screen Section" (0)
[   899.734] (**) |   |-->Monitor "<default monitor>"
[   899.734] (==) No monitor specified for screen "Default Screen Section".
        Using a default monitor configuration.
[   899.734] (==) Automatically adding devices
[   899.734] (==) Automatically enabling devices
[   899.734] (==) Automatically adding GPU devices
[   899.734] (==) Automatically binding GPU devices
[   899.734] (==) Max clients allowed: 256, resource mask: 0x1fffff
[   899.734] (WW) The directory "/usr/share/fonts/Type1/" does not exist.
[   899.734]    Entry deleted from font path.
[   899.734] (WW) `fonts.dir' not found (or not valid) in "/usr/share/fonts/100dpi/".
[   899.734]    Entry deleted from font path.
[   899.734]    (Run 'mkfontdir' on "/usr/share/fonts/100dpi/").
[   899.734] (WW) `fonts.dir' not found (or not valid) in "/usr/share/fonts/75dpi/".
[   899.734]    Entry deleted from font path.
[   899.734]    (Run 'mkfontdir' on "/usr/share/fonts/75dpi/").
[   899.734] (==) FontPath set to:
        /usr/share/fonts/misc/,
        /usr/share/fonts/TTF/,
        /usr/share/fonts/OTF/
[   899.734] (==) ModulePath set to "/usr/lib/xorg/modules"
[   899.734] (II) The server relies on udev to provide the list of input devices.
        If no devices become available, reconfigure udev or disable AutoAddDevices.
[   899.734] (II) Loader magic: 0x1207d4d20
[   899.734] (II) Module ABI versions:
[   899.734]    X.Org ANSI C Emulation: 0.4
[   899.734]    X.Org Video Driver: 23.0
[   899.734]    X.Org XInput driver : 24.1
[   899.734]    X.Org Server Extension : 10.0
[   899.736] (++) using VT number 7

[   899.736] (II) systemd-logind: logind integration requires -keeptty and -keeptty was not provided, disabling logind integration
[   899.737] (II) xfree86: Adding drm device (/dev/dri/card0)
[   899.742] (II) no primary bus or device found
[   899.742]    falling back to /sys/devices/platform/50000000.host1x/drm/drm/card0
[   899.742] (II) LoadModule: "glx"
[   899.742] (II) Loading /usr/lib/xorg/modules/extensions/libglx.so
[   899.751] (II) Module glx: vendor="X.Org Foundation"
[   899.751]    compiled for 1.19.3, module version = 1.0.0
[   899.751]    ABI class: X.Org Server Extension, version 10.0
[   899.751] (==) Matched modesetting as autoconfigured driver 0
[   899.751] (==) Matched fbdev as autoconfigured driver 1
[   899.751] (==) Assigned the driver to the xf86ConfigLayout
[   899.751] (II) LoadModule: "modesetting"
[   899.751] (II) Loading /usr/lib/xorg/modules/drivers/modesetting_drv.so
[   899.751] (II) Module modesetting: vendor="X.Org Foundation"
[   899.751]    compiled for 1.19.3, module version = 1.19.3
[   899.751]    Module class: X.Org Video Driver
[   899.751]    ABI class: X.Org Video Driver, version 23.0
[   899.752] (II) LoadModule: "fbdev"
[   899.752] (WW) Warning, couldn't open module fbdev
[   899.752] (II) UnloadModule: "fbdev"
[   899.752] (II) Unloading fbdev
[   899.752] (EE) Failed to load module "fbdev" (module does not exist, 0)
[   899.752] (II) modesetting: Driver for Modesetting Kernel Drivers: kms
[   899.758] (II) modeset(0): using drv /dev/dri/card0
[   899.759] (II) modeset(0): Creating default Display subsection in Screen section
        "Default Screen Section" for depth/fbbpp 24/32
[   899.759] (==) modeset(0): Depth 24, (==) framebuffer bpp 32
[   899.759] (==) modeset(0): RGB weight 888
[   899.759] (==) modeset(0): Default visual is TrueColor
[   899.759] (II) Loading sub module "glamoregl"
[   899.759] (II) LoadModule: "glamoregl"
[   899.759] (II) Loading /usr/lib/xorg/modules/libglamoregl.so
[   899.761] (II) Module glamoregl: vendor="X.Org Foundation"
[   899.761]    compiled for 1.19.3, module version = 1.0.0
[   899.761]    ABI class: X.Org ANSI C Emulation, version 0.4
[   899.761] (II) glamor: OpenGL accelerated X.org driver based.
[   899.872] (II) glamor: EGL version 1.4 (DRI2):
[   899.872] EGL_MESA_drm_image required.
[   899.873] (EE) modeset(0): glamor initialization failed
[   899.873] (II) modeset(0): ShadowFB: preferred NO, enabled NO
[   899.873] (II) modeset(0): Output DSI-1 has no monitor section
[   899.873] (II) modeset(0): EDID for output DSI-1
[   899.873] (II) modeset(0): Printing probed modes for output DSI-1
[   899.873] (II) modeset(0): Modeline "2560x1800"x60.0  304.42  2560 2640 2720 2800  1800 1804 1808 1812 (108.7 kHz)
[   899.873] (II) modeset(0): Output DSI-1 connected
[   899.873] (II) modeset(0): Using sloppy heuristic for initial modes
[   899.873] (II) modeset(0): Output DSI-1 using initial mode 2560x1800 +0+0
[   899.873] (==) modeset(0): Using gamma correction (1.0, 1.0, 1.0)
[   899.873] (==) modeset(0): DPI set to (96, 96)
[   899.873] (II) Loading sub module "fb"
[   899.873] (II) LoadModule: "fb"
[   899.874] (II) Loading /usr/lib/xorg/modules/libfb.so
[   899.874] (II) Module fb: vendor="X.Org Foundation"
[   899.874]    compiled for 1.19.3, module version = 1.0.0
[   899.874]    ABI class: X.Org ANSI C Emulation, version 0.4
[   899.874] (==) Depth 24 pixmap format is 32 bpp
[   899.897] (==) modeset(0): Backing store enabled
[   899.897] (==) modeset(0): Silken mouse enabled
[   899.897] (II) modeset(0): RandR 1.2 enabled, ignore the following RandR disabled message.
[   899.897] (==) modeset(0): DPMS enabled
[   899.897] (--) RandR disabled
[   899.909] (II) AIGLX: Screen 0 is not DRI2 capable
[   899.909] (EE) AIGLX: reverting to software rendering
[   899.913] (II) IGLX: enabled GLX_MESA_copy_sub_buffer
[   899.915] (II) IGLX: Loaded and initialized swrast
[   899.915] (II) GLX: Initialized DRISWRAST GL provider for screen 0
[   899.915] (II) modeset(0): Damage tracking initialized
[   899.915] (II) modeset(0): Setting screen physical size to 677 x 476
[   900.025] (II) config/udev: Adding input device hid-over-i2c 06CB:3370 (/dev/input/event0)
[   900.025] (**) hid-over-i2c 06CB:3370: Applying InputClass "libinput touchscreen catchall"
[   900.025] (II) LoadModule: "libinput"
[   900.026] (II) Loading /usr/lib/xorg/modules/input/libinput_drv.so
[   900.029] (II) Module libinput: vendor="X.Org Foundation"
[   900.029]    compiled for 1.19.3, module version = 0.25.1
[   900.029]    Module class: X.Org XInput Driver
[   900.029]    ABI class: X.Org XInput driver, version 24.1
[   900.029] (II) Using input driver 'libinput' for 'hid-over-i2c 06CB:3370'
[   900.029] (**) hid-over-i2c 06CB:3370: always reports core events
[   900.029] (**) Option "Device" "/dev/input/event0"
[   900.029] (**) Option "_source" "server/udev"
[   900.030] (II) event0  - (II) hid-over-i2c 06CB:3370: (II) is tagged by udev as: Touchscreen
[   900.031] (II) event0  - (II) hid-over-i2c 06CB:3370: (II) device is a touch device
[   900.031] (II) event0  - (II) hid-over-i2c 06CB:3370: (II) device removed
[   900.064] (**) Option "config_info" "udev:/sys/devices/platform/7000c000.i2c/i2c-0/0-0020/0018:06CB:3370.0001/input/input0/event0"
[   900.064] (II) XINPUT: Adding extended input device "hid-over-i2c 06CB:3370" (type: TOUCHSCREEN, id 6)
[   900.064] (**) Option "AccelerationScheme" "none"
[   900.064] (**) hid-over-i2c 06CB:3370: (accel) selected scheme none/0
[   900.064] (**) hid-over-i2c 06CB:3370: (accel) acceleration factor: 2.000
[   900.064] (**) hid-over-i2c 06CB:3370: (accel) acceleration threshold: 4
[   900.065] (II) event0  - (II) hid-over-i2c 06CB:3370: (II) is tagged by udev as: Touchscreen
[   900.065] (II) event0  - (II) hid-over-i2c 06CB:3370: (II) device is a touch device
[   900.066] (II) config/udev: Adding input device hid-over-i2c 06CB:3370 (/dev/input/mouse0)
[   900.066] (II) No input driver specified, ignoring this device.
[   900.066] (II) This device may have been added with another device file.
[   900.067] (II) config/udev: Adding input device gpio-keys (/dev/input/event1)
[   900.067] (**) gpio-keys: Applying InputClass "libinput keyboard catchall"
[   900.067] (II) Using input driver 'libinput' for 'gpio-keys'
[   900.067] (**) gpio-keys: always reports core events
[   900.067] (**) Option "Device" "/dev/input/event1"
[   900.067] (**) Option "_source" "server/udev"
[   900.068] (II) event1  - (II) gpio-keys: (II) is tagged by udev as: Keyboard Switch
[   900.068] (II) event1  - (II) gpio-keys: (II) device is a keyboard
[   900.068] (II) event1  - (II) gpio-keys: (II) device is a switch device
[   900.068] (II) event1  - (II) gpio-keys: (II) device removed
[   900.088] (**) Option "config_info" "udev:/sys/devices/platform/gpio-keys/input/input6/event1"
[   900.088] (II) XINPUT: Adding extended input device "gpio-keys" (type: KEYBOARD, id 7)
[   900.089] (II) event1  - (II) gpio-keys: (II) is tagged by udev as: Keyboard Switch
[   900.089] (II) event1  - (II) gpio-keys: (II) device is a keyboard
[   900.089] (II) event1  - (II) gpio-keys: (II) device is a switch device
[   900.884] (II) modeset(0): Disabling kernel dirty updates, not required.
[   914.720] (II) event0  - (II) hid-over-i2c 06CB:3370: (II) device removed
[   914.756] (II) event1  - (II) gpio-keys: (II) device removed
[   915.900] (II) event0  - (II) hid-over-i2c 06CB:3370: (II) is tagged by udev as: Touchscreen
[   915.900] (II) event0  - (II) hid-over-i2c 06CB:3370: (II) device is a touch device
[   915.901] (II) event1  - (II) gpio-keys: (II) is tagged by udev as: Keyboard Switch
[   915.901] (II) event1  - (II) gpio-keys: (II) device is a keyboard
[   915.901] (II) event1  - (II) gpio-keys: (II) device is a switch device

Can't enter desktop

I extract the arch-xfce-lightdm.tar.gz to /data.
And then I run fastboot boot boot-4.13-rc4_20170816_114501.img.unsigned or fastboot boot boot-4.13-rc4_20170809_223257.img.

It can see the noise screen both.

But I can't enter the desktop after waiting 30 minutes.

Why Linux distros aren't ported to phones or tablets?

delete

Edit by @denysvitali

The original question was the following (I don't know why the author decided to remove it):

Nice work man! With this project.

I wanted to know for quite some time why linux operating systems are not ported to phones or tablets with android like on they are on desktops and laptops. I know linux can run on various devices with different CPU architectures, I use linux daily, but why it is so hard to run some linux OS natively on android based device with linux kernel?

I know you can run linux on android with linux deploy, but not natively. Is it just because companies are not interested in porting linux to phones and tablets?

thx for reply

WiFi Broken Again?

I seem to be having issues similar to those outlines in #3 . But for me the wireless still doesn't work. I used the get_firmware script and your latest v4.19 boot img (I couldn't manage to make a signed image on my own).

I love this project! Everything is working but wireless (I can get by with ethernet in a pinch). I don't think I'm quite the kernel hacker you are. Any pointers or advice on getting my wireless up would be greatly appreciated! Also, please let me know what info you might need. Happy to carry out tests and do diagnostics.

Lightbar doesn't work

With our 4.14.0-rc6 kernel (and previous), the lightbar doesn't work. Apparently there are some changes in the mfd/cros* drivers (cros_ec_lightbar.c) that are missing. We only need to port them to our linux-smaug kernel from Google's linux-smaug.

Bluetooth doesn't work

Using the latest rootfs and the latest kernel (system-4.15-wifi)

[root@alarm ~]# rfkill list
0: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no
1: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no
[root@alarm ~]# journalctl -b | grep -i bluetooth
Feb 20 17:05:38 alarm kernel: Bluetooth: HCI UART driver ver 2.3
Feb 20 17:05:38 alarm kernel: Bluetooth: HCI UART protocol H4 registered
Feb 20 17:05:38 alarm kernel: Bluetooth: Generic Bluetooth SDIO driver ver 0.1
Feb 20 17:05:38 alarm kernel: Bluetooth: HIDP (Human Interface Emulation) ver 1.2
Feb 20 17:05:38 alarm kernel: Bluetooth: HIDP socket layer initialized
Feb 20 17:05:42 alarm systemd[1]: sys-subsystem-bluetooth-devices-hci0.device: Changed dead -> plugged
Feb 20 17:05:42 alarm systemd[1]: sys-devices-platform-700b0200.sdhci-mmc_host-mmc1-mmc1:0001-mmc1:0001:3-bluetooth-hci0.device: Changed dead -> plugged
Feb 20 17:05:42 alarm systemd[1]: bluetooth.target: Trying to enqueue job bluetooth.target/start/fail
Feb 20 17:05:42 alarm systemd[1]: bluetooth.target: Installed new job bluetooth.target/start as 101
Feb 20 17:05:42 alarm systemd[1]: bluetooth.service: Installed new job bluetooth.service/start as 102
Feb 20 17:05:42 alarm systemd[1]: bluetooth.target: Enqueued job bluetooth.target/start as 101
Feb 20 17:05:43 alarm systemd-rfkill[240]: A new rfkill device has been added with index 0 and type bluetooth.
Feb 20 17:05:43 alarm systemd-rfkill[240]: Loaded state '0' from /var/lib/systemd/rfkill/platform-700b0200.sdhci:bluetooth.
Feb 20 17:05:44 alarm systemd[1]: bluetooth.service: ConditionPathIsDirectory=/sys/class/bluetooth succeeded.
Feb 20 17:05:44 alarm systemd[1]: bluetooth.service: Passing 0 fds to service
Feb 20 17:05:44 alarm systemd[1]: bluetooth.service: About to execute: /usr/lib/bluetooth/bluetoothd
Feb 20 17:05:44 alarm systemd[1]: bluetooth.service: Forked /usr/lib/bluetooth/bluetoothd as 249
Feb 20 17:05:44 alarm systemd[1]: bluetooth.service: Changed dead -> start
Feb 20 17:05:44 alarm systemd[1]: Starting Bluetooth service...
Feb 20 17:05:44 alarm systemd[249]: bluetooth.service: Executing: /usr/lib/bluetooth/bluetoothd
Feb 20 17:05:44 alarm bluetoothd[249]: Bluetooth daemon 5.48
Feb 20 17:05:44 alarm bluetoothd[249]: Starting SDP server
Feb 20 17:05:44 alarm systemd[1]: bluetooth.service: Got notification message from PID 249 (STATUS=Starting up)
Feb 20 17:05:44 alarm systemd[1]: bluetooth.service: D-Bus name org.bluez now registered by :1.3
Feb 20 17:05:44 alarm systemd[1]: bluetooth.service: Changed start -> running
Feb 20 17:05:44 alarm systemd[1]: bluetooth.service: Job bluetooth.service/start finished, result=done
Feb 20 17:05:44 alarm systemd[1]: Started Bluetooth service.
Feb 20 17:05:44 alarm bluetoothd[249]: kernel lacks bnep-protocol support
Feb 20 17:05:44 alarm bluetoothd[249]: System does not support network plugin
Feb 20 17:05:44 alarm bluetoothd[249]: Bluetooth management interface 1.14 initialized
Feb 20 17:05:44 alarm dbus-daemon[245]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' requested by ':1.3' (uid=0 pid=249 comm="/usr/lib/bluetooth/bluetoothd ")
Feb 20 17:05:44 alarm systemd[1]: bluetooth.service: Got notification message from PID 249 (STATUS=Running)
Feb 20 17:05:44 alarm systemd[1]: bluetooth.service: Got notification message from PID 249 (READY=1)
Feb 20 17:05:44 alarm systemd[1]: bluetooth.target changed dead -> active
Feb 20 17:05:44 alarm systemd[1]: bluetooth.target: Job bluetooth.target/start finished, result=done
Feb 20 17:05:44 alarm systemd[1]: Reached target Bluetooth.
Feb 20 17:05:45 alarm NetworkManager[248]: <info>  [1519146345.3840] Loaded device plugin: NMBluezManager (/usr/lib/NetworkManager/libnm-device-plugin-bluetooth.so)
Feb 20 17:05:46 alarm systemd[318]: sys-subsystem-bluetooth-devices-hci0.device: Changed dead -> plugged
Feb 20 17:05:46 alarm systemd[318]: sys-devices-platform-700b0200.sdhci-mmc_host-mmc1-mmc1:0001-mmc1:0001:3-bluetooth-hci0.device: Changed dead -> plugged
Feb 20 17:07:20 alarm systemd[542]: sys-devices-platform-700b0200.sdhci-mmc_host-mmc1-mmc1:0001-mmc1:0001:3-bluetooth-hci0.device: Changed dead -> plugged
Feb 20 17:07:20 alarm systemd[542]: sys-subsystem-bluetooth-devices-hci0.device: Changed dead -> plugged
Feb 20 17:08:26 alarm systemd[542]: obex.service: About to execute: /usr/lib/bluetooth/obexd
Feb 20 17:08:26 alarm systemd[542]: obex.service: Forked /usr/lib/bluetooth/obexd as 987
Feb 20 17:08:26 alarm systemd[542]: Starting Bluetooth OBEX service...
Feb 20 17:08:26 alarm systemd[987]: obex.service: Executing: /usr/lib/bluetooth/obexd
Feb 20 17:08:26 alarm systemd[542]: Started Bluetooth OBEX service.

Bluetoothctl:

[root@alarm ~]# bluetoothctl 
Agent registered
[bluetooth]# list
[bluetooth]# show
No default controller available
[bluetooth]# scan on
No default controller available
[bluetooth]# power on
No default controller available
[bluetooth]# exit
Agent unregistered
[root@alarm ~]# ls -la /dev/ttyTHS2
crw-rw---- 1 root uucp 241, 2 Feb 20 17:05 /dev/ttyTHS2
[root@alarm ~]# ls -la /sys/class/bluetooth/hci0/
total 0
drwxr-xr-x 4 root root    0 Feb 20 17:05 .
drwxr-xr-x 3 root root    0 Feb 20 17:05 ..
lrwxrwxrwx 1 root root    0 Feb 20 17:11 device -> ../../../mmc1:0001:3
drwxr-xr-x 2 root root    0 Feb 20 17:11 power
drwxr-xr-x 3 root root    0 Feb 20 17:05 rfkill0
lrwxrwxrwx 1 root root    0 Feb 20 17:05 subsystem -> ../../../../../../../../../class/bluetooth
-rw-r--r-- 1 root root 4096 Feb 20 17:05 uevent

Ramdisk edits:
denysvitali/smaug-custom-initram@a7abf06

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.