Code Monkey home page Code Monkey logo

m5ez's Issues

Slow connect to Wifi after boot

Hi,

This is my first issue to this repo. So I'd like to begin by congratulating @ropg for this immensely time saving lib!

And back to my issue. I have a saved Wifi network + autoconnect ON. After booting, it takes more than 1 minute to connect to Wifi. I share below my findings. During my investigations I found 2 items: A) a strange behavior of WiFi.begin() and B) something that I consider a glitch in the code/state machine.

Here is a debug log:

Lib version 2.1.2. Working w/ platform.io.

EZWIFI: Starting scan
EZWIFI: Scan got 10 networks
EZWIFI: Match: wifi-home-dachau, connecting...
[1] EZWIFI: Connect timed out...
[2] EZWIFI: Scan got 10 networks
[3] EZWIFI: No (further) matches, waiting...
EZWIFI: Starting scan
EZWIFI: Scan got 12 networks
EZWIFI: Match: wifi-home-dachau, connecting...
EZWIFI: Connected, returning to IDLE state

A) a strange behavior of WiFi.begin()

[1]: happens almost always. Even if I increase the timeout (e.g. to 100s). So from a reason that I don't understand this line systematically fails:

https://github.com/ropg/M5ez/blob/147cb67c1b48a6424401a420c52cebd7c76d2126/src/M5ez.cpp#L1507

The ESP seems to be in some kind of state that makes this always fail at the beginning (maybe because a scan is in progress?). Subsequent retries work w/o problems. I did some trial/error modifications, w/o success. A new, simple sketch executes WiFi.begin() pretty quickly.

B) something that I consider a glitch in the code/state machine

And speaking of subsequent retries. Immediately after [1], happens [2]. It finds networks again, but this time it doesn't connect. And it enters [3], i.e. waiting mode for 1 min.

The reason for this is line:
https://github.com/ropg/M5ez/blob/147cb67c1b48a6424401a420c52cebd7c76d2126/src/M5ez.cpp#L1528

Commenting this, leads to a quicker connect. Because the wait doesn't happen any more. However, I don't understand what was the reason of this line. It seems to have a purpose. So just commenting/eliminating it may cause issues in other scenarios.

Anyway, even w/ this fixed, A) still happens which is pretty strange.

Thanks a lot in advance.
Best regards,
Cristian

print text with alignment

Hi all,

i am new with the M5ez. I want to know how i can print text to a x,y position with the alignment right.

thx for help

Menus blocking

I have been incorporating blynk into my sketch that use M5ez. One issue I have is can a menu be nonblocking? I have the user in a menu and blynk times out because the menu blocks execution. I tried to use timer and also ez.yield() but no use.

So not really a M5ez issue but would appreciate a workaround.

arduino meets micropython

Hi Rop,
did you look into Micro Python?

I really would like to see some parallel approaches like M5ez in parallel to a Micro Python stack. Or to use Micro Python like an on demand scripting language.
This would give the developer the best of both worlds ...
What do you think?

Timezone lookup for: GeoIP ... ERROR: Timeout

Querying pool.ntp.org ... ERROR: No network
Querying pool.ntp.org ... ERROR: No network
Querying pool.ntp.org ... ERROR: Timeout
Querying pool.ntp.org ... ERROR: Timeout
Querying pool.ntp.org ... ERROR: Timeout
Querying pool.ntp.org ... ERROR: Timeout
Querying pool.ntp.org ... success (round trip 503 ms)
00:26:49.889 -> Received time: Saturday, 24-Nov-18 16:26:49.261 UTC
00:26:49.889 -> Timezone lookup for: Asia/Chongqing ... ERROR: Timeout

ping timezoned.rop.nl

PING timezoned.rop.nl (82.94.252.243) 56(84) bytes of data.
64 bytes from rop.nl (82.94.252.243): icmp_seq=1 ttl=49 time=204 ms
64 bytes from rop.nl (82.94.252.243): icmp_seq=2 ttl=49 time=195 ms
64 bytes from rop.nl (82.94.252.243): icmp_seq=3 ttl=49 time=198 ms
64 bytes from rop.nl (82.94.252.243): icmp_seq=4 ttl=49 time=225 ms
64 bytes from rop.nl (82.94.252.243): icmp_seq=5 ttl=49 time=228 ms
^C
--- timezoned.rop.nl ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4002ms
rtt min/avg/max/mdev = 195.946/210.504/228.083/13.658 ms

Implementing OTA problem

I have been trying to use your tutorial on implementing OTA. So far - I created a respository on Github, published it and created a /compiled_binaries folder. I uploaded my compiled M5stack binary into this folder. So far so good. I got and ran the get_cert script on a linux machine. It generated the certificate but here was one difference from your tutorial. The resulting file was github_com.h instead of raw_githubusercontent_com.h. Anyway I continued by copying the github_com.h file into the sketch directory and modified the sketch to include the wifiupdate code as per your tutorial. Compiled and uploaded to M5stack. All good.
BUT when I run it finds the file but wifiUpdateError() gives Content-type must be "application/octet-stream" ,got text/html;charset=utf-8;

Any ideas what I did wrong ?

Which version to use with ESP 1.0.1 ?

Hi @ropg , the latest ESP32 1.0.2 has a bug (see espressif/arduino-esp32#2786) so I need to downgrade to ESP 1.0.1.

Now M5ez 2.1.0 "M5ez-demo" does not compile with ESP 1.0.1, and M5ez version 2.0.1 also does not compile with ESP 1.0.1.

How can I get a version of M5ez running with ESP 1.0.1?

Background: I need PubSubClient and it only compiles with ESP 1.0.1.

ESP 1.0.1 with M5ez 2.1.0 or 2.0.1 or 2.0.0:
Arduino: 1.8.9 (Mac OS X), Board: "M5Stack-Core-ESP32, QIO, 80MHz, Default, 921600, None"

Build options changed, rebuilding all
/Users/marcel/Development/Arduino/libraries/M5Stack/src/utility/Power.cpp: In member function 'void POWER::powerOFF()': /Users/marcel/Development/Arduino/libraries/M5Stack/src/utility/Power.cpp:361:28: error: 'gpio_deep_sleep_hold_dis' was not declared in this scope gpio_deep_sleep_hold_dis();

Multiple libraries were found for "WiFi.h"
Used: /Users/marcel/Library/Arduino15/packages/esp32/hardware/esp32/1.0.1/libraries/WiFi
Not used: /Applications/Arduino.app/Contents/Java/libraries/WiFi
Multiple libraries were found for "SD.h"
Used: /Users/marcel/Library/Arduino15/packages/esp32/hardware/esp32/1.0.1/libraries/SD
Not used: /Applications/Arduino.app/Contents/Java/libraries/SD
exit status 1
Error compiling for board M5Stack-Core-ESP32.

Is there a possibility of responding to smoothing fonts?

I like beautiful fonts.
Smoothing font is best for 320 x 240 screen.
The M5Stack library incorporates TFT_eSPI, but smoothing fonts can not be used at this time.
However, if you apply patches, smoothing fonts are available.

m5stack/M5Stack#112

However, in M5ez which is essential to M5Stack, the display will collapse.

(Maybe M5Stack may correspond to smoothing fonts.) Is there any possibility that M5ez will correspond to smoothing fonts?

Network name off by one

When you ask it to forget a network name it removes the next one down,. So to forget the first network you have to remove every other one. Somehow the pointer is off by one.

How can I disable the EZ Wifi functionality?

I'm using EspMQTTClient which has it's own Wifi + MQTT retrying connection handling. When I run the EspMQTTClient example it show that it's reconnecting properly, however I cannot get it to work within a M5ez application.

I tried #undef M5EZ_WIFI but that still tries to auto connect by EZ.

How can I disable the EZ Wifi functionality? I only want to use the EZ menus.

Numeric entries in textInput ?

Thanks for all your help - I am almost down to my last issue with M5ez in my application. I need to restrict data entry into the textInput box to only numbers. How can I do this ?

WiFi: connecting without M5ez menu (ez.wifi.menu)

Hello,

I'd like to connect my m5stack to my wifi with out M5ez menu system.

I'm trying to use following sequence:

void setup() {
  ez.begin();
  [...]
  if (ez.wifi.indexForSSID("your-ssid") == -1) {
    ez.wifi.add("your-ssid", "your-key");
    ez.wifi.writeFlash();
  }
  [...]
}

But.. without results. There are no errors but there is no connection.

Full (example) code:

#include <M5Stack.h>
#include <M5ez.h>

const char* wifi_ssid = "myssid";
const char* wifi_password = "mypass";

void setup() {
  
  ez.begin();
  ez.header.show("WiFi test");

  ez.canvas.println("----> WiFi LIST");
  for (int8_t n = 0; n < ez.wifi.networks.size(); n++) {
    ez.canvas.print(ez.wifi.networks[n].SSID);
    ez.canvas.print(": ");
    ez.canvas.println(ez.wifi.networks[n].key);
  }
  ez.canvas.println("----> END");
  ez.canvas.println("");

  if (ez.wifi.indexForSSID(wifi_ssid) == -1) {
    Serial.println("WIFI: not found. Adding.");
    ez.wifi.add(wifi_ssid, wifi_password);
    ez.wifi.writeFlash();
  }

  ez.wifi.begin();

  ez.canvas.print("SSID:"); ez.canvas.println(WiFi.SSID());
  ez.canvas.print("Key:"); ez.canvas.println(WiFi.psk());
  ez.canvas.print("My IP:"); ez.canvas.println(WiFi.localIP().toString());

}

void loop() {
  // loop
}

First loop results correct ssid, password (my network).. however.. nothing happens.
ez.canvas.print("My IP:"); ez.canvas.println(WiFi.localIP().toString());

results in My IP: 0.0.0.0
M5ez version: 2.0.1

Any clues?

Regards, M

manual/readme: m5.begin in samples

Hello,
You write in chapter "how it works" we have to call ez.begin in place of m5.begin, in chapter "Menus", samples show m5.begin in setup.
Thanks for your wonderfull librairy
Jean Vandromme

EZTime TZ a pain

I like EZTime but the time zone entry by city/country is a pain. Can you have an option to just input the timezone +/- hrs GMT ? Thanks. Also any hope for more documentation on how to use the widgets ?

Do you have any Arduino examples of using the clock and wifi in the headers

Hi,

Really like the code and looks relatively simple yet I'm struggling to work out how to have a basic sketch that puts the clock, wifi and a title in the header. Have tried many variants of the commands but always get this error. Have managed several other sketches using M5Stack with wifi access, MQTT and various displays but would like to use your code as it looks cleaner. All help welcomed.

/var/folders/83/0n15kbkj0x90tdvm2gm489mc0000gn/T/arduino_modified_sketch_484742/z-sysInfo.ino: In function 'void ezTimeLog()':
z-sysInfo:39:28: error: expected primary-expression before numeric constant
   ez.header.insert(uint8_t 0, String "clock", uint16_t 40;
                            ^
z-sysInfo:39:38: error: expected primary-expression before string constant
   ez.header.insert(uint8_t 0, String "clock", uint16_t 40;
                                      ^
z-sysInfo:39:56: error: expected primary-expression before numeric constant
   ez.header.insert(uint8_t 0, String "clock", uint16_t 40;
                                                        ^
Multiple libraries were found for "SD.h"

My Sketch looks like this.

#ifndef MAIN_DECLARED

#include <M5Stack.h>
#include <M5ez.h>
#include <ezTime.h>

void setup() {
  ez.begin();
  ezTimeLog();

  while(true) {
    ez.yield();
  }
}

void loop() {

}

#endif  // #ifndef MAIN_DECLARED



void ezTimeLog() {

  ez.header.show("Sullivan Control");  
  ez.header.insert(uint8_t 0, String "clock", uint16_t 40;
  ezt::setDebug(INFO, ez.canvas);
  ezt::setInterval(20);

  #ifdef MAIN_DECLARED
    ez.buttons.wait("Abort");
    ezt::setDebug(NONE, Serial);
    ezt::setInterval(600);
  #endif
  
}

Thanks Alan

auto generate CSR certifite

I must manually generate CSR every time.
Can you set it to auto generate a CSR?

(ez.wifi.update("web_addr", >CSR<, &progress_bar)     // auto generate CSR

TaskScheduler

Hello,

i ran into another problem. I would like to run a function every 10 seconds.
I used before this library https://github.com/arkhipenko/TaskScheduler but i cant get to work correctly with M5ez.
Without a menu but the M5ez library loaded the scheduler is working fine.
With myMenu.run(); in the loop the scheduler stops after the first call.
With myMenu.runOnce(); the scheduler works only when i select a menu item.

I would like to call a function every 10-15 seconds and update the menu items if it is possible.

I really appreciate any help you can provide.

Crash after repeated screen updates

My application does a repeated update of the canvas from incoming data. Right now, it's three lines of data that are updated every second.

In my first iteration, I did an ez.canvas.clear() before doing any update to the canvas. That seemed to work fine, except that the screen flickered too much. So, I started writing a background-color rectangle over just the line to be updated.

Flickering is reduced, but after about a minute the M5Stack crashes and reboots.

I'm trying to understand what ez.canvas.clear() does that might be different from just writing a rectangle at a specific place on the screen. From the code, it appears that it simply writes a new background-color rectangle to the screen that is the size of the canvas.

#include "images.h"

I am new to all this and barely know what I am doing. Your work with M5ez is amazing and incredibly useful. My IDE compilation hangs up due to the lack of library on the following line:
#include "images.h"

I cannot find where to add this library.

Can you please help?

Running two tasks on M5Stack

Hi
I am working on a project that uses M5ez as the screen handler with the main screen giving access to the M5ez menus through a button but with the initial screen containing live data updated from a second task running on the other core in the M5. When I moved the code that displays new data on the screen from the main task which is also handling the web server to the second task I ran into an exception problem with the exception pointing to the call to clear the canvas.
0x400e1191: ezCanvas::clear() at Arduino Sketchbook\libraries\M5ez\src/M5ez.cpp line 2118
0x400d506f: appUpdateTemperature() at menu_functions.cpp line 53 (discriminator 2)
0x400dc17c: Task2Main(void*) at task2.cpp line 183
0x400897e1: vPortTaskWrapper at esp-idf-public/components/freertos/port.c line 355

Moving the calling code back to the main task removes the problem, any thoughts on why it only works in the main task and not in a task running on the second core. The code to start the second task is included below.

// Start task for second core
xTaskCreatePinnedToCore(
    Task2Main,      /* Task function. */
    "TaskCore2",    /* name of task. */
    3072,           /* Stack size of task */
    NULL,           /* parameter of the task */
    1,              /* priority of the task */
    &TaskCore2,     /* Task handle to keep track of created task */
    0               /* Core */
);  

Unclear how addEvent works, only called once

I want to use M5ez (with disabled EZ Wifi) in conjunction with EspMQTTClient.
Standalone EspMQTTClient example connects to Wifi and to MQTT Broker. In M5ez application I need to call espMQTTClient.loop(); I think this should be done with events.. however, it looks like the event wrapper is called only once:

EspMQTTClient client;

void setup() {
#include <themes/default.h>
  ezt::setDebug(INFO);

  ez.addEvent(clientLoopWrapper);
  ez.begin();

  Serial.println("SETUP complete");
}

uint16_t clientLoopWrapper() {
  Serial.println("\nInside clientLoopWrapper");
  client.loop();
return 0;
}

void loop() {
  ezMenu mainmenu("Welcome");
  mainmenu.txtSmall();
  mainmenu.addItem("Send", send_msg);
  mainmenu.addItem("Built-in settings", ez.settings.menu);
  mainmenu.upOnFirst("last|up");
  mainmenu.downOnLast("first|down");
  mainmenu.run();

}


In the serial output there is only 1 appearance of "Inside clientLoopWrapper". So the loop() of EspMQTTClient is called just once...

Detect if WiFi is connected

Hi, love this library and I believe it will make the M5Stack really usable.

However, I need to connect the device to MQTT using this library which I believe to be ESP32 compatible.

To do so, I need 2 things.

  1. I need to know if the WiFi is actually connected and I can't work out how to do that with your library. I've done the usual check such as if (WiFi.status() == WL_CONNECTED) {...} but that never seems to be true.

  2. I need to access a WiFiClient object - I am hoping that including WiFiClient.h will do the trick once I can get 1 working.

Any advice please? I have the latest versions of M5ez and the M5Stack.

where is ropg?

Seems like support of M5ez has been abandoned. Great shame - because it is really a nice system for M5stack ddevelopment. Hopefully ropg will find time again.

Program crashes when logging data

hello

at the moment im working on a project where i use the M5Stack to get data from a different board and save it in a cloud every few seconds

. but my program crashes everytime when i try to execute a function where i try to log the data on thingspeak.com while i'm in a menu or submenu.

the function im trying to execute:

//----------------------------------------------------------------------------------------------
int writeThingSpeak(){ //Log Data on ThingSpeak.com
//----------------------------------------------------------------------------------------------
ThingSpeak.setField(1,state);
ThingSpeak.setField(2,volt);
ThingSpeak.setField(3,uamp);
leistung = ((volt * uamp)/1000000);
ThingSpeak.setField(4,leistung);
ThingSpeak.setField(5,t_gas);
ThingSpeak.setField(6,t_box);
ThingSpeak.setField(7,vers_m);
ThingSpeak.setField(8,vers_s);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
}

I'm having problems using GFX fonts.

Hi,
I'm having problems using GFX fonts.

Sketch:
#include <M5Stack.h>
#include "FreeSerifBold9pt7b.h"

void setup() {
m5.begin();
m5.lcd.fillScreen(TFT_WHITE);
m5.lcd.setTextColor(TFT_BLACK);
m5.lcd.setTextDatum(CC_DATUM);
m5.lcd.setFreeFont(&FreeSerifBold9pt7b);
m5.lcd.drawString("Testing 123...", 160, 120);
}
void loop() {
}

Errors:
FreeSerifBold9pt7b.h:1:41: error: redefinition of 'const uint8_t FreeSerifBold9pt7bBitmaps []'
const uint8_t FreeSerifBold9pt7bBitmaps[] PROGMEM = {

and several other similar errors
What am I doing wrong?
An example was taken here https://rop.nl/truetype2gfx/

How to update data displayed on canvas?

Hello Rop

I'm trying to display some values in a submenu-item. Now I'm updating those values every 6 seconds with an event. but even if I redraw the canvas at the end of the event-function, the values in my menu won't change. So i wanted to ask if there's another way to refresh the canvas so that it displays the new values?

Display JPG Image

Hello,

i have a minor problem and i hope you can guide me.
I made a basic menu with 2-3 items. If i select one of them the m5stack will download an image to the SD card.
I would like to show that image until i press a button (or a combination of 2 buttons).
At this moment i am using the following command:
M5.lcd.drawJpgFile(SD, filename);
When the image stops loading the menu will show.

Thank you for considering my request.

Buttons triggered automatically after connected to wifi?

I uploaded the demo project to my m5stack, and i found the physical buttons will be randomlly triggered after connected to wifi ?? Is there anyone having the same issue here? Or it's just my hardware's issue. I'll write a button demo with wifi on to see if it's the hardware's fault later.

M5 Level Bar

Please add class m5 Level bar

  • Works like the current progress bar implementation.
  • allows up to 8 level bars to be displayed per screen.
  • optional shows a changing value below or above the level bar, as well as an assignable label.
  • optional selected state (just changes color of the selected level bar to indicate it is selected.)

Enhancement Requests

Sorry to drop this in now, I know you are preoccupied and I don't want you to even think about this until things are more normal again. I just didn't want to lose the thoughts. Hope they are helpful.


Still liking this library which seems well in advance of any of the others ๐Ÿฅ‡

A few things I find myself wishing for & would be interested in your feedback on:

  1. The most critical issue is that, when you are waiting for menu/textbox responses, you stop the main loop. This means that nothing else can happen. My MQTT output stops and the broker thinks that the unit is offline.

    This really limits the usefulness of the library unfortunately. I'm not a strong enough C++ programmer to know if there is any way to get round this issue?

    For now, I'm partially getting round this by the use of FreeRTOS background tasks.

  2. Being able to scroll the display when print/println reaches the end of the canvas.

    Looking at your code it seems as though you have something that isn't quite working yet?

  3. Having a flag that indicates when print/println is about to reach the end of the canvas - so that we can clear the canvas manually if we don't want scrolling.

    As a minimum, perhaps you could expose _print_x and _print_y so that it was easier to do our own calculations if needed?

  4. In the WiFi menu, it would be much nicer to be able to go up from the 1st menu entry to the last. It is a bit of a pain if you've gone into the menu and then want to exit immediately.

  5. In the WiFi menu and probably in the sysinfo app as well, it would be really nice to show the device's IP address and maybe MAC address. Would make things a lot easier when working with DHCP.

WiFi password retrieval

Is there a way to retrieve the wifi password in the program. You can get the ssid by WiFi.SSID() but any ideas about the password?

Unable to disable FACES without changing library

Would it be possible in future versions to define if FACES is enabled in the application code rather than in the library? As it stands at the moment the Wire library is always loaded and configures the I2C port. This means you cannot use that port for, for instance, a serial connection.

Otherwise the library is working really well for me. Thank you for all your work on it.

graphics

Thanks for a nice library and great documentation. Question - to draw rectangles etc do I need to use M5.lcd. routines ? So I must include M5stack.h ? Also in your examples you never call M5.update(). Is this not necessary ?

Crashes with canvas.print..

I think there is some memory overflow problem with canvas.print. I had my program that uses M5ez crash after a period of time. Then reboot and repeat. I removed all the canvas.print statements and replaced them with M5.Lcd.print and did not have these odd crashes any more. Maybe you should take a look. Thanks.

Different color map on newer M5stack

I have been using M5ez on M5stack. Works great. But I just received a new batch of M5stack and the colors are mapped differently. For example magenta is now green, blue is yellow. What gives here and how to fix? I need the program to maintain compatibilty with the older M5's.

Printing degree symbol?

This may not specifically be for M5ez, but I'm using the library right now to create a position display for my boat. I need to be able to print a degree symbol (raised "o" character) as part of a display of latitude and longitude. The only font I can find that includes it is TomThumb, which is too small for what I need.

Anyone have any ideas?

ezTime.h missing?

I just upgraded to v2.0.0. I had the previous version demo compiling and working ok. I can't seem to get the current version compiled as the error comes back that "ezTime.h" is missing.

Scheduling tasks with longer periods

Hi,

I'd like to schedule a rather costly background task for execution every three hours (the exact time doesn't matter - I just don't want to waste resources by setting off the function more frequently). As far as I understand void ez.addEvent(uint16_t (*function)(), uint32_t when = 1) takes a 16-bit uint as the argument for the period, which limits the schedule to at most 65535 milliseconds or just over a minute.
Any chances that this is changed to uint32 ?

Kind regards
Nikolaus

Using SD card for images

Is there any way to remove the image arrays and instead use images on an SD card (or SPIFFS), I would like to make use of the image menus but due to the complexity of application I have run out of flash using the normal 2 OTA partitions plus SPIFFS.

Image menus?

For the life of me I cannot figure out the ez images menus work. In the demo example there are a number of images in the single images.h file. How were these converted from jpeg and combined ?

Way to end ezMenu routine and free resources used?

Dear Rop,

thanks for the really nice program. My question is: I set up my m5stack with a mainmenu, all things work fine. Now I added an event routine which measures the temperature via a sensor wired to my stack. If the temperature rises over a certain max. limit I open a messagebox with a warning and this can be accepted by pressing "OK". After that the screen stays black, however I would like to switch back to the mainmenu. If I call up the mainmenu function (after "OK" is pressed) this works only about 5 times until the stack crashes (memory overflow) cause I started the mainmenu routine several times in my case. So question is, how can I stop the running instance (and free resources) of the mainmenu or how can I switch back to it? As far as I can see, this scenario is not foreseen, as a messagebox call always seem to be called from the menu itself by mainly user interaction so the route back to the mainmenu is clear. It would be nice to work with messageboxes as a "standalone" callup function and have a route back to the mainmenu.

Thank you in advance

groej

addEvent() needs go-over

Need to be able to give addEvent() a void and specify a fixed interval so people can directly call various .run() functions without writing wrappers. Check what return value 0 in current uint16_t was meant for. Add better documentation and an example.

Documentation on widgets ?

I am really enjoying your M5ez. I have ported my app to it and really like the event management. The multibutton code is very clever. I have figured most things out but:

  1. I need the clock widget to access my external RTC. Is there a way ?
  2. Need more examples on how to create and use widgets.

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.