GithubHelp home page GithubHelp logo

mgenest110 / qt Goto Github PK

View Code? Open in Web Editor NEW

This project forked from therecipe/qt

0.0 1.0 0.0 33.8 MB

Qt binding for Go (Golang) which supports Windows / macOS / Linux / Android / iOS / Sailfish OS / Raspberry Pi

License: GNU Lesser General Public License v3.0

Go 65.49% C++ 26.22% C 7.64% Shell 0.02% QML 0.61% JavaScript 0.02%

qt's Introduction

GoDoc GoCover GoReportCard

TravisCI AppveyorCI SemaphoreCI CircleCI

Overview

Qt is a cross-platform application framework.

Go (often referred to as golang) is a free and open source programming language created at Google.

This binding aims to make it as simple as possible to write applications for all operating systems supported by Qt in Go.

The project is pretty much a WIP and not recommended to be used in production yet.

However it should already contain everything you need to build fully featured Qt applications in Go.

Screenshots of the Line Edits example

Installation

Full or stub installation?

The full installation requires at least 8gb free ram and takes 20 min.

The stub installation requires only 1gb free ram and takes 10 min. (experimental)

The only differnce between those two version is, that you won't be able to use go run/build to build your applications if you choose to install the stub version. You are therefore limited to the use of qtdeploy to build your application.

To build the stub version export QT_STUB=true system wide and procede with the installation as usuall.

Environmental variables

If you define enviormental variables during the installation export them system wide, as they are needed not only during the installation but also later.

Add the enviormental variables into your $HOME/.bash_profile or $HOME/.profile on macOS or Linux.

Or if you are on Windows simply use the advanced system settings.

Docker Images (experimental)

You can also use Docker images from hub.docker.

To cross compile to Windows, Linux and Android.

You will still need to install the desktop version for your host system first!

Command line debugging

You can export QT_DEBUG=true before "qtdeploying" your application to enable printing of the current function name at runtime.

Instructions

Windows

  1. Install Go >= 1.7.1 and setup a proper GOPATH

  2. Install Qt 5.7.0

    or

    • Install the Qt-dev package with MSYS2 and define QT_MSYS2=true or define a custom Qt location with QT_MSYS2_DIR (usually: C:\msys32\ or C:\msys64);
      • pacman -Syyu
      • if you want to deploy 32-bit applications pacman -S mingw-w64-i686-qt-creator mingw-w64-i686-qt5
      • if you want to deploy 64-bit applications pacman -S mingw-w64-x86_64-qt-creator mingw-w64-x86_64-qt5
      • pacman -Scc
  3. Add the directory that contains gcc and g++ to your PATH (not needed with MSYS2)

    • C:\Qt\Qt5.7.0\Tools\mingw530_32\bin
  4. Download the binding

    • go get -v github.com/therecipe/qt/cmd/...
  5. Generate, install and test (20 min) (MSYS2: run within the MSYS2 MinGW 32-bit or MSYS2 MinGW 64-bit shell)

    • %GOPATH%\bin\qtsetup
  6. Create your first application

  7. Deploy applications with %GOPATH%\bin\qtdeploy build desktop path\to\your\project (MSYS2: run within the MSYS2 MinGW 32-bit or MSYS2 MinGW 64-bit shell)

macOS

  1. Install Go >= 1.7.1 and setup a proper GOPATH

  2. Install Qt 5.7.0

    or

    • Install the Qt-dev package with Homebrew and define QT_HOMEBREW=true or define a custom Qt location with QT_DIR (usually: /usr/local/opt/qt5/); if you want to link against homebrews Qt libs (experimental)
      • brew install qt5
  3. Install Xcode >= 7.2.0; you can also define a custom location with XCODE_DIR

  4. Download the binding

    • go get -v github.com/therecipe/qt/cmd/...
  5. Generate, install and test (20 min)

    • $GOPATH/bin/qtsetup
  6. Create your first application

  7. Deploy applications with $GOPATH/bin/qtdeploy build desktop path/to/your/project

Linux

  1. Install Go >= 1.7.1 and setup a proper GOPATH

  2. Install Qt 5.7.0

    or

    • Install the Qt-dev package with your system package manager; if you want to link against your system Qt libs (experimental)
      • add export QT_PKG_CONFIG=true to your .profile or .bash_profile
      • if needed you can also define custom locations for the misc and doc dir with QT_MISC_DIR and/or QT_DOC_DIR
      • and you may want to define a custom pkg-config search path with PKG_CONFIG_PATH, if the default path points to old Qt pkg-config files
  3. Install g++ >= 5 and OpenGL dependencies

    • Debian/Ubuntu (apt-get)

      • sudo apt-get -y install build-essential libgl1-mesa-dev
    • Fedora/RHEL/CentOS (yum)

      • sudo yum -y groupinstall "C Development Tools and Libraries"
      • sudo yum -y install mesa-libGL-devel
    • openSUSE (zypper)

      • sudo zypper -n install -t pattern devel_basis
  4. Download the binding

    • go get -v github.com/therecipe/qt/cmd/...
  5. Generate, install and test (20 min)

    • $GOPATH/bin/qtsetup
  6. Create your first application

  7. Deploy applications with $GOPATH/bin/qtdeploy build desktop path/to/your/project (use the *.sh file to start your application)

Optional: Cross compile for Windows on Debian/Ubuntu (experimental)

  1. Install Wine

    • sudo apt-get -y install wine
  2. Install MXE (M cross environment)

    • echo "deb http://pkg.mxe.cc/repos/apt/debian wheezy main" | sudo tee --append /etc/apt/sources.list.d/mxeapt.list > /dev/null

    • sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D43A795B73B16ABE9643FE1AFD8FFF16DB45C6AB

    • sudo apt-get update

    • if you want to deploy 32-bit applications sudo apt-get -y install mxe-i686-w64-mingw32.shared-qt3d mxe-i686-w64-mingw32.shared-qtactiveqt mxe-i686-w64-mingw32.shared-qtbase mxe-i686-w64-mingw32.shared-qtcanvas3d mxe-i686-w64-mingw32.shared-qtcharts mxe-i686-w64-mingw32.shared-qtconnectivity mxe-i686-w64-mingw32.shared-qtdatavis3d mxe-i686-w64-mingw32.shared-qtdeclarative mxe-i686-w64-mingw32.shared-qtdeclarative-render2d mxe-i686-w64-mingw32.shared-qtgamepad mxe-i686-w64-mingw32.shared-qtgraphicaleffects mxe-i686-w64-mingw32.shared-qtimageformats mxe-i686-w64-mingw32.shared-qtlocation mxe-i686-w64-mingw32.shared-qtmultimedia mxe-i686-w64-mingw32.shared-qtofficeopenxml mxe-i686-w64-mingw32.shared-qtpurchasing mxe-i686-w64-mingw32.shared-qtquickcontrols mxe-i686-w64-mingw32.shared-qtquickcontrols2 mxe-i686-w64-mingw32.shared-qtscript mxe-i686-w64-mingw32.shared-qtscxml mxe-i686-w64-mingw32.shared-qtsensors mxe-i686-w64-mingw32.shared-qtserialbus mxe-i686-w64-mingw32.shared-qtserialport mxe-i686-w64-mingw32.shared-qtservice mxe-i686-w64-mingw32.shared-qtsvg mxe-i686-w64-mingw32.shared-qtsystems mxe-i686-w64-mingw32.shared-qttools mxe-i686-w64-mingw32.shared-qttranslations mxe-i686-w64-mingw32.shared-qtvirtualkeyboard mxe-i686-w64-mingw32.shared-qtwebchannel mxe-i686-w64-mingw32.shared-qtwebkit mxe-i686-w64-mingw32.shared-qtwebsockets mxe-i686-w64-mingw32.shared-qtwinextras mxe-i686-w64-mingw32.shared-qtxlsxwriter mxe-i686-w64-mingw32.shared-qtxmlpatterns

    • if you want to deploy 64-bit applications sudo apt-get -y install mxe-x86-64-w64-mingw32.shared-qt3d mxe-x86-64-w64-mingw32.shared-qtactiveqt mxe-x86-64-w64-mingw32.shared-qtbase mxe-x86-64-w64-mingw32.shared-qtcanvas3d mxe-x86-64-w64-mingw32.shared-qtcharts mxe-x86-64-w64-mingw32.shared-qtconnectivity mxe-x86-64-w64-mingw32.shared-qtdatavis3d mxe-x86-64-w64-mingw32.shared-qtdeclarative mxe-x86-64-w64-mingw32.shared-qtdeclarative-render2d mxe-x86-64-w64-mingw32.shared-qtgamepad mxe-x86-64-w64-mingw32.shared-qtgraphicaleffects mxe-x86-64-w64-mingw32.shared-qtimageformats mxe-x86-64-w64-mingw32.shared-qtlocation mxe-x86-64-w64-mingw32.shared-qtmultimedia mxe-x86-64-w64-mingw32.shared-qtofficeopenxml mxe-x86-64-w64-mingw32.shared-qtpurchasing mxe-x86-64-w64-mingw32.shared-qtquickcontrols mxe-x86-64-w64-mingw32.shared-qtquickcontrols2 mxe-x86-64-w64-mingw32.shared-qtscript mxe-x86-64-w64-mingw32.shared-qtscxml mxe-x86-64-w64-mingw32.shared-qtsensors mxe-x86-64-w64-mingw32.shared-qtserialbus mxe-x86-64-w64-mingw32.shared-qtserialport mxe-x86-64-w64-mingw32.shared-qtservice mxe-x86-64-w64-mingw32.shared-qtsvg mxe-x86-64-w64-mingw32.shared-qtsystems mxe-x86-64-w64-mingw32.shared-qttools mxe-x86-64-w64-mingw32.shared-qttranslations mxe-x86-64-w64-mingw32.shared-qtvirtualkeyboard mxe-x86-64-w64-mingw32.shared-qtwebchannel mxe-x86-64-w64-mingw32.shared-qtwebkit mxe-x86-64-w64-mingw32.shared-qtwebsockets mxe-x86-64-w64-mingw32.shared-qtwinextras mxe-x86-64-w64-mingw32.shared-qtxlsxwriter mxe-x86-64-w64-mingw32.shared-qtxmlpatterns

  3. Export QT_MXE_ARCH=386 to deploy 32-bit applications or QT_MXE_ARCH=amd64 to deploy 64-bit applications.

  4. Generate, install and test (20 min)

    • $GOPATH/bin/qtsetup windows
  5. Deploy applications with $GOPATH/bin/qtdeploy build windows path/to/your/project

Android

  1. Install the desktop version for Windows, macOS or Linux

  2. Unzip the Android SDK in C:\ or $HOME; you can also define a custom location with ANDROID_SDK_DIR

  3. Install the SDK dependencies with C:\android-sdk-windows\tools\android.bat or $HOME/android-sdk-{ macosx | linux }/tools/android

    • Tools
      • Android SDK Build-tools (25.0.0)
    • Android 7.1.1 (API 25)
      • SDK Platform
    • Extras (Windows only)
      • Google USB Driver
  4. Unzip the Android NDK in C:\ or $HOME; you can also define a custom location with ANDROID_NDK_DIR

  5. Install Java SE Development Kit >= 8 (Linux: install in $HOME/jdk/); you can also define a custom location with JDK_DIR

  6. You may need to chmod your $GOROOT/pkg dir or run the setup as root

  7. Install and test (20 min)

    • %GOPATH%\bin\qtsetup android

      or

    • $GOPATH/bin/qtsetup android

  8. Create your first application

  9. Deploy applications with [GOPATH]/bin/qtdeploy build android path/to/your/project

iOS

  1. Install the desktop version for macOS

  2. Install and test (20 min)

    • $GOPATH/bin/qtsetup ios && $GOPATH/bin/qtsetup ios-simulator
  3. Create your first application

  4. Deploy applications with $GOPATH/bin/qtdeploy build ios path/to/your/project or $GOPATH/bin/qtdeploy build ios-simulator path/to/your/project

Sailfish OS

  1. Install the desktop version for Windows, macOS or Linux

  2. Install VirtualBox; you can also define a custom location with VIRTUALBOX_DIR

  3. Install the Sailfish OS SDK; you can also define a custom location with SAILFISH_DIR

  4. You may need to chmod your $GOROOT dir or run the setup as root

  5. Install and test (20 min)

    • %GOPATH%\bin\qtsetup sailfish && %GOPATH%\bin\qtsetup sailfish-emulator

      or

    • $GOPATH/bin/qtsetup sailfish && $GOPATH/bin/qtsetup sailfish-emulator

  6. Create your first application

  7. Deploy applications with [GOPATH]/bin/qtdeploy build sailfish path/to/your/project or [GOPATH]/bin/qtdeploy build sailfish-emulator path/to/your/project

Raspberry Pi

  1. Install the desktop version for Linux

  2. Create a folder $HOME/raspi

    • mkdir $HOME/raspi
  3. Download and unpack the Qt source

    • cd $HOME/raspi && wget https://download.qt.io/official_releases/qt/5.7/5.7.0/single/qt-everywhere-opensource-src-5.7.0.tar.gz
    • tar -xzf qt-everywhere-opensource-src-5.7.0.tar.gz qt-everywhere-opensource-src-5.7.0
  4. Patch Qt Source

    • cd $HOME/raspi/qt-everywhere-opensource-src-5.7.0/qtbase && sed -i 's/c++1z/c++11/' ./mkspecs/devices/linux-rpi3-g++/qmake.conf

    • cd $HOME/raspi/qt-everywhere-opensource-src-5.7.0/qtwayland && wget https://github.com/qtproject/qtwayland/commit/75294be3.patch && patch -p1 -i 75294be3.patch

  5. Download the cross compiler; you can also define a custom location with RPI_TOOLS_DIR

    • cd $HOME/raspi && git clone --depth 1 https://github.com/raspberrypi/tools.git
  6. Get dependencies and install Arch Linux on your SD card

  7. Start your Raspberry Pi

  8. Enable root login over ssh

    • export RASPI_IP=192.168.XXX.XXX (replace XXX.XXX with the valid ip ending)

    • ssh alarm@$RASPI_IP (password: alarm)

    • su (password: root)

    • sed -i 's/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config && sed -i 's/prohibit-password/yes/' /etc/ssh/sshd_config && systemctl restart sshd.service

  9. Update and install dependencies (5 min)

    • pacman -Syyu

    • pacman -S fontconfig icu libinput libjpeg-turbo libproxy libsm libxi libxkbcommon-x11 libxrender tslib xcb-util-image xcb-util-keysyms xcb-util-wm freetds gtk3 libfbclient libmariadbclient mtdev postgresql-libs unixodbc assimp bluez-libs sdl2 jasper libmng libwebp gst-plugins-base-libs libpulse openal gst-plugins-bad hunspell libxcomposite wayland gst-plugins-base libxslt gst-plugins-good ffmpeg jsoncpp libevent libsrtp libvpx libxcursor libxrandr libxss libxtst nss opus protobuf snappy xcb-util xcb-util-cursor xcb-util-renderutil xcb-util-xrm libxfixes libxshmfence libxext libx11 libxcb libice weston ttf-freefont lxde gamin xorg-server xorg-xinit xorg-server-utils mesa xf86-video-fbdev xf86-video-vesa xorg-server-xwayland xf86-input-libinput gst-plugins-ugly sqlite2 cups xorg-server-devel rsync

    • pacman -Scc

    • Raspberry Pi 1

      • sed -i 's/gpu_mem=64/gpu_mem=128/' /boot/config.txt
      • echo "exec startlxde" >> $HOME/.xinitrc && mkdir $HOME/.config/ && echo -e "[core]\nbackend=fbdev-backend.so\nmodules=xwayland.so" >> $HOME/.config/weston.ini
      • echo "dtoverlay=vc4-kms-v3d,cma-128" >> /boot/config.txt && sed -i 's/fbdev-backend/drm-backend/' $HOME/.config/weston.ini (experimental: enable OpenGL under X; will break most applications)
    • Raspberry Pi 2 or 3

      • sed -i 's/gpu_mem=64/gpu_mem=256/' /boot/config.txt
      • echo "exec startlxde" >> $HOME/.xinitrc && mkdir $HOME/.config/ && echo -e "[core]\nbackend=fbdev-backend.so\nmodules=xwayland.so" >> $HOME/.config/weston.ini
      • echo "dtoverlay=vc4-kms-v3d,cma-256" >> /boot/config.txt && sed -i 's/fbdev-backend/drm-backend/' $HOME/.config/weston.ini (experimental: enable OpenGL under X; will break most applications)
    • reboot

  10. Get sysroot for cross compiling (password: root) (5 min)

    • cd $HOME/raspi && mkdir sysroot sysroot/usr sysroot/opt

    • rsync -avz root@$RASPI_IP:/lib sysroot --delete

    • rsync -avz root@$RASPI_IP:/usr/include sysroot/usr --delete

    • rsync -avz root@$RASPI_IP:/usr/lib sysroot/usr --delete

    • rsync -avz root@$RASPI_IP:/opt/vc sysroot/opt --delete

  11. Prepare sysroot; you can also define a custom location with RPI1_SYSROOT_DIR, RPI2_SYSROOT_DIR or RPI3_SYSROOT_DIR

    • cd $HOME/raspi && wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
    • chmod +x sysroot-relativelinks.py && ./sysroot-relativelinks.py sysroot
  12. Build Qt (2 h)

    • cd $HOME/raspi/qt-everywhere-opensource-src-5.7.0

    • Raspberry Pi 1

      • ./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=$HOME/raspi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot $HOME/raspi/sysroot -opensource -confirm-license -make libs -skip webengine -nomake tools -nomake examples -extprefix /usr/local/Qt5.7.0/5.7/rpi1 -I $HOME/raspi/sysroot/opt/vc/include -I $HOME/raspi/sysroot/opt/vc/include/interface/vcos -I $HOME/raspi/sysroot/opt/vc/include/interface/vcos/pthreads -I $HOME/raspi/sysroot/opt/vc/include/interface/vmcs_host/linux -silent
    • Raspberry Pi 2

      • ./configure -opengl es2 -device linux-rasp-pi2-g++ -device-option CROSS_COMPILE=$HOME/raspi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot $HOME/raspi/sysroot -opensource -confirm-license -make libs -skip webengine -nomake tools -nomake examples -extprefix /usr/local/Qt5.7.0/5.7/rpi2 -I $HOME/raspi/sysroot/opt/vc/include -I $HOME/raspi/sysroot/opt/vc/include/interface/vcos -I $HOME/raspi/sysroot/opt/vc/include/interface/vcos/pthreads -I $HOME/raspi/sysroot/opt/vc/include/interface/vmcs_host/linux -silent
    • Raspberry Pi 3

      • ./configure -opengl es2 -device linux-rpi3-g++ -device-option CROSS_COMPILE=$HOME/raspi/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot $HOME/raspi/sysroot -opensource -confirm-license -make libs -skip webengine -nomake tools -nomake examples -extprefix /usr/local/Qt5.7.0/5.7/rpi3 -I $HOME/raspi/sysroot/opt/vc/include -I $HOME/raspi/sysroot/opt/vc/include/interface/vcos -I $HOME/raspi/sysroot/opt/vc/include/interface/vcos/pthreads -I $HOME/raspi/sysroot/opt/vc/include/interface/vmcs_host/linux -silent
    • make -k -i && sudo make -k -i install

  13. Prepare the Qt directory

    • sudo chown -R $USER $HOME/Qt5.7.0/
  14. You may need to chmod your $GOROOT/pkg dir or run the setup as root

  15. Install and test the binding (20 min)

    • Raspberry Pi 1

      • $GOPATH/bin/qtsetup rpi1
    • Raspberry Pi 2

      • $GOPATH/bin/qtsetup rpi2
    • Raspberry Pi 3

      • $GOPATH/bin/qtsetup rpi3
  16. Notes

    • run startx & before starting an application with -platform xcb (qml/quick applications won't work; they may work with Qt 5.8)

    • run weston & or weston --tty=1 & (via ssh) or create your own compositor before starting an application with -platform wayland-egl (qml/quick applications won't work; they may work with Qt 5.8)

    • you can increase the available gpu memory by editing /boot/config.txt

  17. Create your first application

  18. Deploy applications with $GOPATH/bin/qtdeploy build rpiX path/to/your/project (replace X with 1, 2 or 3)

Docker

  1. Install the desktop version for Windows, macOS or Linux

  2. Install and start Docker

  3. Share your GOPATH host directory as a data volume with Docker. And make sure your Project folder is in your GOPATH.

  4. Download the necessary Docker image(s) and run the setup.

  • For cross compiling to Windows:

    • docker pull therecipe/qt:base_windows

    • Optional: Install Wine to test your applications.

    • $GOPATH/bin/qtsetup windows-docker

    • Deploy applications with $GOPATH/bin/qtdeploy build windows path/to/your/project docker

  • For cross compiling to Linux:

    • docker pull therecipe/qt:base

    • $GOPATH/bin/qtsetup linux-docker

    • Deploy applications with $GOPATH/bin/qtdeploy build linux path/to/your/project docker

  • For cross compiling to Android:

    • docker pull therecipe/qt:base_android

    • $GOPATH/bin/qtsetup android-docker

    • Deploy applications with $GOPATH/bin/qtdeploy build android path/to/your/project docker

Code Editor Settings (for code completion)

  • IntelliJ Idea

    Help > Edit Custom Properties

    # custom IntelliJ IDEA properties
    
    idea.max.intellisense.filesize=999999
    

    Help > Edit Custom VM Options

    # custom IntelliJ IDEA VM options
    
    -Xms128m
    -Xmx2000m
    -XX:ReservedCodeCacheSize=240m
    -XX:+UseCompressedOops
    
  • Neovim

    Update your neocomplete.vim

    let g:neocomplete#skip_auto_completion_time = ""
    

Example

  1. Create a project folder [GOPATH]/src/qtExample

  2. Create a file [GOPATH]/src/qtExample/main.go

package main

import ( "os"

	"github.com/therecipe/qt/core"
	"github.com/therecipe/qt/widgets"

)

func main() { widgets.NewQApplication(len(os.Args), os.Args)

	//create a button and connect the clicked signal
	var button = widgets.NewQPushButton2("Click me!", nil)
	button.ConnectClicked(func(flag bool) {
		widgets.QMessageBox_Information(nil, "OK", "You clicked me!", widgets.QMessageBox__Ok, widgets.QMessageBox__Ok)
	})

	//create a layout and add the button
	var layout = widgets.NewQVBoxLayout()
	layout.AddWidget(button, 0, core.Qt__AlignCenter)

	//create a window, add the layout and show the window
	var window = widgets.NewQMainWindow(nil, 0)
	window.SetWindowTitle("Hello World Example")
	window.SetMinimumSize2(200, 200)
	window.Layout().DestroyQObject()
	window.SetLayout(layout)
	window.Show()

	widgets.QApplication_Exec()

}


3. Open the terminal in `[GOPATH]/src` and run `[GOPATH]/bin/qtdeploy build desktop ./qtExample`

4. You will find the application in `[GOPATH]/src/qtExample/deploy/[GOOS]_minimal/`

5. Take a look at the [examples](https://github.com/therecipe/qt/tree/master/internal/examples)

6. Make yourself familiar with the [Qt documentation](https://doc.qt.io/qt-5/classes.html)

7. Join our Slack Channel [#qt-binding](https://gophers.slack.com/messages/qt-binding/details/)

qt's People

Contributors

therecipe avatar 5k3105 avatar jeanlucmongrain avatar longlongh4 avatar joesis avatar xland avatar

Watchers

 avatar

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.