Giter VIP home page Giter VIP logo

seeed-studio / codecraft Goto Github PK

View Code? Open in Web Editor NEW
18.0 15.0 3.0 439.41 MB

Codecraft is a graphical programming software which is based on Scratch 3.0

Home Page: https://ide.tinkergen.com/

License: Apache License 2.0

JavaScript 2.42% Python 0.22% Shell 0.05% HTML 0.02% CSS 0.09% Less 0.01% EJS 0.01% Batchfile 0.02% Makefile 0.14% C 82.14% C++ 14.12% Tcl 0.01% CMake 0.07% Logos 0.03% Assembly 0.62% Processing 0.03% GDB 0.01% XC 0.01% XS 0.01% Roff 0.01%
arduino grove scratch3 seeedstudio

codecraft's Introduction

Codecraft

Feature Requests

Codecraft is a graphical programming software which is based on Scratch 3.0. It targets teenagers of age 7-16, compatible with WIN/MAC.
By using a drag-and-drop interface, Codecraft has been helping users program without the need to write code in traditional text-based programming languages. Since its’ launch in 2018, it’s designed to make it easier for beginners, especially STEAM classrooms, to embrace coding to create projects and prototypes. With a focus on programming microcontrollers and IoT devices, Codecraft has been adapted and trusted by thousands of users all around the world. In 2022, Codecraft was recognized as Bett Awards Finalist and The Edtech Awards Cool Tool Finalist, two important and in prestigious awards the education technology industry.

Codecraft help online

Support Devices

Download

You can download the latest version from the download page from our website or Github Release

Prerequisites

This project requires:

Auto Install

Linux/Mac:

bash run-mac.sh

Windows:

bash run-win64.sh

Manual Installation

cd ./blocks
npm install && npm run build

cd ./l10n
npm install && npm run build

cd ./vm
npm install && npm run build

cd ./gui
npm install
  • For mac or linux like
npm run build-mac
  • For win
npm run build-win

Build main app

rm -r ../main/app/gui && cp -r ./build ../main/app/gui
cd ./main/app
npm install
./node_modules/.bin/electron-rebuild serialport

# If the error message “script is prohibited on this system” appears on the Windows   
# system, you need to open powershell as an administrator, and then execute 
# Set-ExecutionPolicy RemoteSigned

cd ./main
npm install
rm -r build 
  • For Mac
npm run publish-mac
  • For Linux like
npm run publish-linux
  • For Windows
npm run publish-win64

Once you finish building, you can find the installer under main/build/

Debug Mode

If you want to enter debug mode and debug the gui, you need to run the gui locally first. The gui depends on block, l10n, and vm, so you need to compile these three projects first.

cd ./blocks
npm install && npm run build

cd ./l10n
npm install && npm run build

cd ./vm
npm install && npm run build

cd ./gui
npm run start

At this time, a web service is running in the current terminal. localhost:8601

Then modify window load URL.

Line 213 in /main/src/application.js

Comment out the line.
window.loadURL(loadURL);

Open the line.
window.loadURL('http://localhost:8601');

If you need the console, open the line.
window.webContents.openDevTools();

Open a new terminal

cd ./main
npm run start

Add block and library

block shape and type definition

block directory: blocks/blocks_vertical

block l10n directory: blocks/msg/scratch_msgs.js

The block type value must start with 'argument', 'colour', 'control', 'data', 'event', 'looks', 'math', 'motion', 'operator', 'procedures', 'sensing', 'sound', 'system', 'display', 'azure', 'json', 'mqtt'. these values ​​are defined in CORE_EXTENSIONS of vm/src/serialization/sb2.js and sb3.js files

block code definition

code directory: gui/src/lib/generators/${device}/

block ui render

ui xml directory: gui/lib/toolboxs/toolbox-${deviceId}-xml.js

1001: grove zero
1002: arduino
1004: micro:bit
1005: mark
1006: grove joint
1007: mPython
1008: glint
1009: bittle
1010: wio terminal

arduino library

library directory: main/compilers/arduino-libraries/

You can put your arduino library in this directory

Contribute

PR welcome

Here, we’d also love to announce an open call for contributions to Codecraft open source project on GitHub. Whether you're a seasoned programmer or just starting out, we welcome contributions of all levels. From fixing bugs, to implementing new features & new blocks of functions, to make it compatible with more hardware platforms, to improving the overall codebase, there are many ways in which you can contribute to the project. Thanks in advance for your interest in contributing to this project!

License

The code contained in this repository and the executable distributions are licensed under the terms of the Apache License 2.0. The executable distributions contain third-party code licensed under other compatible licenses such as BSD-3.

codecraft's People

Contributors

chenwenhao568 avatar jancee avatar meilily avatar mikeweishuai avatar tianrking avatar zoethivet avatar

Stargazers

 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

codecraft's Issues

Typos in the Readme due to a previous push

Since the project has been pushed previosly, most of the commands possibly refer to another url.
i.e.

git clone -b main https://github.com/Seeed-Projects/seeed-codecraft ~/seeed-codecraft 
export workspace=~/seeed-codecraft
pushd workspace

Should be

git clone -b main https://github.com/Seeed-Studio/CodeCraft ~/CodeCraft
export workspace=~/CodeCraft
pushd workspace

Upload to Arduino uno does not work from Mac

I am trying a simple project using original Arduino Uno + Grove Shield.
IDE Works great, but I can't upload via serial, it just hangs.

If I copy-paste the same code in the Arduino IDE it uploads and works just fine

Versions

  • codecraft pc 2.7.1.5
  • arduino ide 2.2.1
  • macbook pro M2 max
  • sonoma 14.1.1

Changelog for Codecraft 2.7.1.x

Wonderful.
Congratulation to Seeed's team and Wen-Chen-Hao for all of this.

If we were to make a changelog of the stuff that were added in this latest version of Codecraft:

I have this issue when parsing json, but the code looks good. I don't understand, it says upload error. Will repeat tomorrow.

I've opened several minor issues, that could make the sowftare even more solid:

Looking for you comments.
I may do a little explanatory videos of this new functionalities, we could use it to revamp the platform.

Add Neopixel WS2813

Can you update the Chainable LED to the Neopixel Led with the official neopixel library?

upload error when parsing json

Hi!

I'm running this code
image

The code seems good

      tft.drawString((String)message["light"], 150, 120);
      tft.drawString((String)message["accX"], 150, 160);

and receive this error.

Cannot edit in read-only editor (occurred 39 times)
Error: Command failed: cd "C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\script\arduino\wioterminal" && .\build "C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino" "C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\buildTemp\arduino\wioterminal" "C:\Users\dgomb\CodecraftAssistant\libraries" Could Not Find C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\buildTemp\arduino\wioterminal\grove_.ino.bin In file included from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcUnified-master\src/lwip/arch.h:49:0, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcUnified-master\src/lwip/debug.h:40, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcUnified-master\src/lwip/opt.h:52, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcUnified-master\src/lwip/ip_addr.h:40, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcUnified-master\src/esp/tcpip_adapter.h:44, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcUnified-master\src/esp/esp_event.h:25, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcUnified-master\src/esp/esp_event_loop.h:22, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcUnified-master\src/esp/esp_lib_unified.h:12, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcUnified-master\src/seeed_rpcUnified.h:11, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcWiFi-master\src/WiFiGeneric.h:26, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcWiFi-master\src/WiFiSTA.h:28, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcWiFi-master\src/WiFi.h:32, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcWiFi-master\src/rpcWiFi.h:1, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\buildTemp\arduino\wioterminal\grove_\grove_.ino:1: C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\libraries\Seeed_Arduino_rpcUnified-master\src/lwip/arch/cc.h:44:0: warning: "BYTE_ORDER" redefined #define BYTE_ORDER LITTLE_ENDIAN In file included from c:\users\dgomb\appdata\local\programs\cc-assistant\resources\compilers\c\arm-none-eabi\include\sys\types.h:67:0, from c:\users\dgomb\appdata\local\programs\cc-assistant\resources\compilers\c\arm-none-eabi\include\stdio.h:61, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/Print.h:23, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/Stream.h:26, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/HardwareSerial.h:24, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/Arduino.h:83, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\buildTemp\arduino\wioterminal\Temp\arduino_build\sketch\grove_.ino.cpp:1: c:\users\dgomb\appdata\local\programs\cc-assistant\resources\compilers\c\arm-none-eabi\include\machine\endian.h:20:0: note: this is the location of the previous definition #define BYTE_ORDER _BYTE_ORDER C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\buildTemp\arduino\wioterminal\grove_\grove_.ino: In function 'void loop()': C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\buildTemp\arduino\wioterminal\grove_\grove_.ino:65:45: error: call of overloaded 'String(JSONVar)' is ambiguous tft.drawString((String)message["light"], 150, 120); ^ In file included from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/Arduino.h:80:0, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\buildTemp\arduino\wioterminal\Temp\arduino_build\sketch\grove_.ino.cpp:1: C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:73:11: note: candidate: String::String(double, unsigned char) explicit String(double, unsigned char decimalPlaces=2); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:72:11: note: candidate: String::String(float, unsigned char) explicit String(float, unsigned char decimalPlaces=2); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:71:11: note: candidate: String::String(long unsigned int, unsigned char) explicit String(unsigned long, unsigned char base=10); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:70:11: note: candidate: String::String(long int, unsigned char) explicit String(long, unsigned char base=10); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:69:11: note: candidate: String::String(unsigned int, unsigned char) explicit String(unsigned int, unsigned char base=10); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:68:11: note: candidate: String::String(int, unsigned char) explicit String(int, unsigned char base=10); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:67:11: note: candidate: String::String(unsigned char, unsigned char) explicit String(unsigned char, unsigned char base=10); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:66:11: note: candidate: String::String(char) explicit String(char c); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:60:2: note: candidate: String::String(const String&) String(const String &str); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:59:2: note: candidate: String::String(const char*) String(const char *cstr = ""); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\buildTemp\arduino\wioterminal\grove_\grove_.ino:66:44: error: call of overloaded 'String(JSONVar)' is ambiguous tft.drawString((String)message["accX"], 150, 160); ^ In file included from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/Arduino.h:80:0, from C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\buildTemp\arduino\wioterminal\Temp\arduino_build\sketch\grove_.ino.cpp:1: C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:73:11: note: candidate: String::String(double, unsigned char) explicit String(double, unsigned char decimalPlaces=2); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:72:11: note: candidate: String::String(float, unsigned char) explicit String(float, unsigned char decimalPlaces=2); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:71:11: note: candidate: String::String(long unsigned int, unsigned char) explicit String(unsigned long, unsigned char base=10); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:70:11: note: candidate: String::String(long int, unsigned char) explicit String(long, unsigned char base=10); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:69:11: note: candidate: String::String(unsigned int, unsigned char) explicit String(unsigned int, unsigned char base=10); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:68:11: note: candidate: String::String(int, unsigned char) explicit String(int, unsigned char base=10); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:67:11: note: candidate: String::String(unsigned char, unsigned char) explicit String(unsigned char, unsigned char base=10); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:66:11: note: candidate: String::String(char) explicit String(char c); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:60:2: note: candidate: String::String(const String&) String(const String &str); ^~~~~~ C:\Users\dgomb\AppData\Local\Programs\cc-assistant\resources\compilers\arduino\contents\hardware\Seeeduino\hardware\samd\1.8.2\cores\arduino/WString.h:59:2: note: candidate: String::String(const char*) String(const char *cstr = ""); ^~~~~~ exit status 1

error in launching Codecraft Locally

Hi.
I've followed the instructions and I'm getting this error.

dgomb@DESKTOP-V6565NP MINGW64 ~/Documents/GitHub/CodeCraft (main)
$ ls
LICENSE  README.md  TODO.md  blocks/  cleanup.sh*  gui/  l10n/  main/  misc/  run-mac.sh*  run-win64.sh*  tools/  vm/

dgomb@DESKTOP-V6565NP MINGW64 ~/Documents/GitHub/CodeCraft (main)
$ cd gui & npm run start & cd main & npm run start
[1] 1754
[2] 1755
[3] 1756
npmnpm  ERR! ERR!code code ENOENT
 ENOENT
npm ERR! syscall open
npm ERR!npm  syscall open
npm ERR! path C:\Users\dgomb\Documents\GitHub\CodeCraft/package.json
ERR! path C:\Users\dgomb\Documents\GitHub\CodeCraft/package.json
npm ERR! errnonpm -4058
 ERR! errno -4058
npm ERR! enoent ENOENT: no such file or directory, open 'C:\Users\dgomb\Documents\GitHub\CodeCraft\package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! enoent ENOENT: no such file or directory, open 'C:\Users\dgomb\Documents\GitHub\CodeCraft\package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\dgomb\AppData\Local\npm-cache\_logs\2024-01-29T11_13_05_889Z-debug-0.log

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\dgomb\AppData\Local\npm-cache\_logs\2024-01-29T11_13_05_892Z-debug-0.log
[1]   Done                    cd gui
[2]-  Exit 127                npm run start
[3]+  Done                    cd main

Codecraft Legacy

Hi!
First of all, I'm here posting this because I find Codecraft a wonderful educational tool.

From my perspective, I love codecraft from 3 different reasons:

  1. Via the Codecraft Assistant, a student could program Wio Terminal without installing everything:
  2. Just as a Code Generator, is helping students to sketch the backbone of a program, (which could be later pasted in the IDE and edited). This made my students save TON of time, and it would be great to find a way to add module that produce code based on custom or more popular libraries, as well as more (if not all) Grove modules.
  3. The TinyML stuff is amazing, but maybe it makes the wohle thing more difficult to mantain, as the whole thing is an API to Edge impulse (possibly? I don’t know what is working behind the sink).

Q: How is the building process managed by Codecraft? Are you using the Arduino CLI?
Q: One of the first things I would try to do if I succeded in building the app (which I'm not right now) would be create custom blocks, simply generating code (point 2). Creating a simple wifi-connection block, together with a jsonizer block and mqtt, would allow a dramatic speeding up of my teaching classes (hopefully many others)
Q: If the direction is to dismiss it from Seeed (ide.tinkergen.com), it would be interesting to distribute it as a docker compose file in order to be easily buildable and hostable around.

Codecraft requests - JSON formatter

We should allow the user to format the data in JSON. This will help later the sending of the data in MQTT, for example.

We could have an extra folder called JSON, to format and send data in JSON format

Debugging first code!

I have this code working!
Planning to make more tests soon.
Great Job!

image

#include <rpcWiFi.h>
#include <MQTT.h>

const char ssid[] = "wifiname";
const char pass[] = "wifipass";
WiFiClient net;
#define BROKER       "broker.hivemq.com"
#define DEV_NAME     "device"
#define MQTT_USER    ""
#define MQTT_PW      ""
MQTTClient client;
String rev_topic;
String rev_payload;
float channel;

void messageReceived(String &topic, String &payload) {
    rev_topic = topic;
    rev_payload = payload;
}

bool connect() {
    while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(1000);
    }
    while (!client.connect(DEV_NAME, MQTT_USER, MQTT_PW)) {
        Serial.print(".");
        delay(1000);
    }
    return true;
}

String readPayload(String topic) {
    if (topic == rev_topic) {
        return rev_payload;
    }
    return "";
}

void setup(){
  WiFi.begin("wifiname", "wifipass");
  client.begin(BROKER, net);
  client.onMessage(messageReceived);
  pinMode(WIO_LIGHT, INPUT);

}



void loop(){

  if (connect()) {
    while (client.connected()) {
      client.subscribe("channel");
      client.publish("channel", (String)analogRead(WIO_LIGHT));
      Serial.println(readPayload("channel"));
      delay(1000);
    }
  }

}

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.