Giter Site home page Giter Site logo

opensprinkler / opensprinkler-app Goto Github PK

View Code? Open in Web Editor NEW
166.0 34.0 89.0 20.04 MB

A mobile interface for the OpenSprinkler irrigation device. Designed to allow manual control, program management (preview, add, edit, and delete), initiation of a run-once program, viewing graphical and tabulated representations of log data, viewing device status, adjusting rain delay, and changing of OpenSprinkler settings.

Home Page: https://opensprinkler.com

License: GNU Affero General Public License v3.0

JavaScript 96.80% Shell 0.02% HTML 0.60% CSS 2.58%

opensprinkler-app's Introduction

 OpenSprinkler App GitHub version

 Official Site | Support | Changelog  © 2013-2016 Samer Albahra (@salbahra)
A mobile interface for the OpenSprinkler irrigation device. Designed to allow manual control, program management (view, edit, delete and add), initiation of a run-once program, viewing device status, adjusting rain delay, changing of OpenSprinkler settings and much more.


Screenshots: iPhone 5S


Overview

  • This application is available for free from the following app stores:

  • This application interfaces with OpenSprinkler. The application has been tested and is compatible with all versions of the Unified firmware for both Arduino and Raspberry Pi.

  • The application is written in Javascript and HTML/CSS. The application runs completely within the user's browser (or webview) and communicates directly with the OpenSprinkler.

  • Language translation is crowd sourced using Transifex. To contribute to any language please visit our Transifex page.

  • For current discussion about the project please refer to the forums.

  • For advanced users, the application supports authentication (HTTP Basic) and SSL for devices behind proxies.


Unified Firmware

Starting with firmware 2.0.3, an option has been added to change the Javascript URL path for the UI. The application now offers an injection method which takes over Ray's OpenSprinkler UI. Just follow the simple steps below to switch your UI:

Firmware 2.1.0 and newer have the following settings by default.

  1. Navigate to http://x.x.x.x/su (replace x.x.x.x with your OpenSprinkler IP)
  2. For "Javascript URL" field use the following: https://ui.opensprinkler.com/js
  3. Enter your password in the field and push "Submit"
  4. Your page will reload and you will now see the application

opensprinkler-app's People

Contributors

arfrie22 avatar criadoperez avatar dependabot[bot] avatar derpthemeus avatar dmt07 avatar fischc avatar jbaudoux avatar kmix avatar kurt-gailey avatar littleprojects avatar miro-georgiev avatar mirofolajtar avatar ncp294 avatar opensprinklershop avatar peteba avatar pipedeveloper avatar rayshobby avatar rianadon avatar salbahra avatar tonyrui avatar weinrank avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

opensprinkler-app's Issues

incorrect translation language

hi,

in the menu "edit options" -> "weather control"

the info text for watering % has a incoorect translation in other languages... I have german selectet. but the translation is dutch or so. :)

Translations not applied

  1. Some german translation from de.js strings are not used/not working:
  • "Water Level" : "% Bewässerung" , but on the screen is for example "Water Level: 111%".
  • "Special Station Auto-Refresh": German text exists, but shows english
  1. And other strings are not translated:
    Location:
    "Enter a Location"
    "Selected Location"
    "Submit"

"Use Metric"

calibration text from "Evapotratranspiration (ET)": "Set the baseline..."
"Baseline ETo"
"Elevation (m)"
"Detetect baseline ETo"

IFTTT:
"Configure Events"

OS 3.0 / App 2.0.3 / Firmware 2.1.8 (6)

Removal of WUnderground / Yahoo forecast breaks UI when setup for SSL

With the change to no longer have forecast data retrieved from WUnderground of Yahoo weather - the web ui no longer works correctly if it has previously been setup for SSL. Previously WUnderground / Yahoo weather were https endpoints but the opensprinkler endpoint is not. Error is due to mixed content where the UI (in my example its behind a reverse proxy) has SSL but opensprinkler endpoint (http://weather.opensprinkler.com) does not.
This is also a more painful issue for those self hosting the UI as the firmware and web ui use the same controller.settings.wurl parameter but firmware has no support for https when making weather calls..

Cannot Disable Manual Mode

Hi Samer,

I've got an OSPi v1.3. I've just upgraded to the latest firmware as released by Dan through the week. I have completly reflashed by SD card with the most recent pre-configured OSPi image from rays site. I then followed Dan's instructions to make sure I had the latest release on top of that.

I'm using your android app, however I can't turn off manual mode. The toggle, goes to off state for a second or two, then comes back on. It doesn't really stop any of the functionality, but it just won't turn off. I'm connecting using the default "opendoor" password.

App Version: 1.2.2
Firmware: 2.1.1-OSPi

Weather Adjustment Options dialog uses metric units when using Yahoo weather source and US location

Zimmerman Weather Adjustment Method Options dialog shows metric units even though using a US location. Previously, when using Wunderground.com API key, the settings dialog used English units.

After removing an old Wunderground.com API key, I chose a location (Antioch, Calif. USA) using the in-app map selector. The weather updates correctly, shows an appropriate weather forecast in main UI.

Later, I opened the Weather Adjustment Options settings.

image

region = weather ? weather.forecast.region : navigator.language.split( "-" )[ 1 ],
isMetric = ( region === "US" || region === "BM" || region === "PW" ) ? false : true,

Looks like the app now uses Yahoo as weather provider, and weather.forecast is truthy (it's an array), but weather.forecast.region is undefined, which causes region to be undefined, and thus isMetric to be true.

Here's the current global weather object:

{
  code: "11"
  forecast: (10) [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}]
  location: "Antioch, CA, US"
  region: "United States"
  source: "yahoo"
  temp: "61°F"
  title: "Showers"
}

image

App version: 1.8.2
Firmware version: 2.8.1 (1)
image

Seconds lost in saved program.

I created a program to refill my fountain. When I created the program, I saved the station time as 1 minute and 30 seconds. When I save the program and then re-open the program, the station time is truncated to 1 minute. I really need to seconds because I need to fine tune the program to deal with evaporation in the fountain.

Adhoc-Program start command sent multiple times in sequence

First of all thanks a lot for the great OpenSprinkler-App.
I'm using the latest commit 128681b, build the firmware with grunt makeFW and I'm hosting it on a local webserver on my Raspberry.
I'm running the App from my PC with Firefox (or Chrome does the same) and I configured a normal Program with a few stations assigned.
When I now start this program as an Adhoc-Program the start command is executed multiple times depending on the history of the web page in the browser.
If I reload the App with Ctrl+R, go to the Adhoc-Program and press Save one start command is sent to the OpenSprinkler server. If I start the Adhoc-Program for the 2nd time 2 start commands are sent in sequence to the OpenSprinkler server. If I start the Adhoc-Program for the 3rd time 3 start commands are sent in sequence to the OpenSprinkler server. This scales up until I reload the App again with Ctrl+R.
It seems the OpenSprinkler-App is somehow chaching and then resending all the previous Adhoc-Programs.

Can you reproduce and fix this bug?

Average water level doesn’t correspond to the runtimes listed

The average water level for a given day in the logs table doesn’t correspond to the runtimes listed for this given day. For example, a runtime of 21 min 36 sec with a basic runtime setting of 30 min should result in an average of 72%. This is not the case. There is also a problem with the average water level listed next to the total runtime, which doesn’t seem to display a correct value. To avoid any misunderstandings a more detailed description of the logs view and especially the values listed might be helpful.

LogsIssue

resolveLocation removes US zip code

line 2559: selected = selected.replace(/^[0-9]{5}\s-\s/,"");
removes the "12345 - " from the RESULTS name:"12345 - CITYNAME, AA"
is there some purpose for this that I can't find? When using a zipcode for location it makes the data horribly inaccurate for my location.
For instance I enter 80923 and hit lookup. The json returned is:
{ "RESULTS": [ { "name": "80923 - Colorado Springs, CO", "type": "city", "c": "US", "zmw": "80923.1.99999", "tz": "America/Denver", "tzs": "MDT", "l": "/q/zmw:80923.1.99999", "ll": "38.900169 -104.701874", "lat": "38.900169", "lon": "-104.701874" } ] }
Then:
{"devt":removed,"nbrd":1,"en":1,"rd":0,"rs":0,"rdst":0,"loc":"Colorado Springs, CO,","wtkey":"removedkey","sunrise":423,"sunset":1109,"sbits":[0,0],"ps":[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0]]}
is stored. When using the "loc" stored, in API calls to wunderground the weather reported is for the 80901 area. Colorado Springs is a sprawling city near the Rocky Mountains, and the 2 zip codes are nearly 30 miles apart, with an approximate 900ft elevation difference. This means while 80901 is reporting Heavy Rain, Tornadoes, and catastrophe, I'm enjoying the Sunshine in my lawnchair in the 80923 area.

As far as I can tell there is no reason for stripping the zipcode during lookup. I commented out the line running the main.js from my SD card and have yet to find ill effect.

I'm now back to running from the hosted files, and using the closest stations name (KCOCOLOR201) for the location, and receiving accurate weather information, however, it would be nice to use the zipcode in the event the single station fails.

feature request: turn of for n days

In the popup of the status page (when selecting the cog) it would be nice to have the option to not just turn off a circuit temporarely but also to turn a circuit off for n days. That would be super helpful.

feature request: seasons

It would be nice to somehow have a possibility to configure all circuits for spring, summer and for autumn differently.

Feature Request: Test station while holding the test button (instead of entering test time)

Currently the only way to test a station is to tap on the test, enter the test time and the start it. Most often the test is done to only check that the stations works well and that requires short time. It might be nice to start the test while the "test" button is pressed (if pressed for more then a tap) and keep the test running until the press is off. This way one can easily control the short test time w/o entering numbers and submitting forms.

Running program decimals

when running a program, it shows like 12 decimal places of seconds. I perhaps get this because I'm using OSPi with weather based water level. This modifies program to increase or decrease watering by various percent. So runtime could be calculated as 15:23.4744643 second. But don't need to display as such.

Sprinkler Design Algorithm

Hi 👋 I realize this isn't totally on-topic because it doesn't necessarily have to do with controlling a sprinkler system, more with designing a sprinkler system.

Is anyone aware of an algorithm that can design an optimal sprinkler system (positioning of heads, lines, zoning) given a polygon to fill (representing a yard)?

Wrong Time Format

The start- and endtime in a opensprinkler program is always US Format, not 24h format
How to reproduce:

  • Switch language to german
  • Options/Location Select a german city
  • System time is showing right, e.G. 01.04.2020 13:21:23
  • The go to Options/Programms and select a starttime - time is 12h format!
    App Version: 2.1.7
    Firmware: 2.1.9 (1)
    Hardware Version: OSPI

More decimal places or equation support for flow meter rate.

Hi, I am running a flow meter that has a flow rate of (0.98/60 = 0.0163333333), however the OpenSprinkler will only let me set it to 0.01 or 0.02, neither of which is very accurate, could anybody point me to where in the codebase this is limited and I'd like to submit a PR, regards.

Help: How to build/compile Android App from Customized Source?

As the title suggests:

I've modified the source code in an effort to add more fixed start times to my OpenSprinkler - and now I am wondering how to compile a new app for use on my devices.

I've installed Grunt, and I'm able to build the working directory, but I truly don't know what to do next. I have also read something about "Phone Gap", but I am not at all sure what to do with that.

Any help will be appreciated

Display rssi on interface

Would it be possible to add a WiFi signal indicator according to the settings.RSSI value? On hover it would display the actual RSSI.

wunderground time out

hello wunderground not work and if I try to click on wethear diagnostic I read a time out message, why?

HTTP Station config getting garbled between App and Firmware

Linking to github issue on Firmware.

Looks like a slight incompatibility on use of encoding across station settings whether via export/input or the station settings cog in UI.

Example config:

"special": {
	"8": {
		"st": 4,
		"sd": "ospi,8080,json.htm?type=command&param=switchlight&idx=99&switchcmd=On,json.htm?type=command&param=switchlight&idx=99&switchcmd=Off"
	}
}

Analysis:

  • Station Settings Cog: UI will encode the station special data using $.param( special ) within submitStations() but Firmware no longer uses urlDecode to convert it back to comma separated config option
  • Export/Import: Export of configuration correctly writes station data to export file but importConfig() does not use encodeURIComponent( info.sd ) before sending to Firmware. So if http station on/off commands contain "&" then Firmware will incorrectly treat that as an end-of-parameter delimiter.

debugWU() no longer displays relevant data

OK, so I think we have a defect as a result of the modification to the Weather Service endpoints.

In the App, debugWU() is now displaying the current weather conditions rather than the forecast values used to calculate the water level. This will be very confusing/unhelpful for users looking to understand the numbers better.

I think the right route to fix this properly would be for the Weather Service to include the Temp, Humidity & Precip values used in the zimmerman calculation as additional return parameters to Firmware when queried via the weather1.py endpoint. Firmware should then retain these values and include them in the /ja status response when queried by App. Then App can display the real data used in the last water level calculation.

I know this sounds a bit convoluted but I think the logic is sound and all the code structure is already in place.

A slightly simpler alternative but possibly prone to timing issues, would be to make the suggested change to Weather Service as above but rather than passing the information via Firmware, the App could call that endpoint directly.

timing doesn't match up on the preview program's screen

I'm mobile when submitting this but the timeline "graph" on preview program's the time doesn't match to current time of the device or the real current time.

current time should be 8:02pm in the screenshot which should be 20:02 on the timeline.

I know the rpi time is right because the sprinklers still come on at the right time and interval. see the second screenshot which shows the right time on the home screen.



Changing the source of "Water level"

Hi,

almost sure, this is not something to talk about here ...
Is there a way to access the water level value on the front page of the app/web?
image

Why do I ask ... My client has rain water tank in which there is a level sensor. I would like to show that value in place of water level. I have a separate web app myself where those values are stored which looks like this:
image
or like this
image

But my client always asks why these two are not identical ... although I have explained several times that one has nothing to do with the other.

Anyway, if there is a way to access this number I would like to set this value to water level in the tank.

Thank you for your answers, best regards, Jernej

On IFTTT integration settings, make the usage a little more intuitive

It took me quite a long time to figure out that the event sent to the Maker Webhook service was "sprinkler". It would be nice if that was simply stated somewhere in the UI.

Alternatively, it would be convenient to have the trigger name configurable, so that folks with multiple sprinklers can use alternate event trigger names per site.

Help: Station attributes do not reload on reboot

I'm modified the OS unified FW, and App to support 5 Master valves, and 10 fixed start times. Everything is working as expected when the OS is connected to power, and then configured for operation.

The problem I'm facing is that after a power cycle, the stations that have been assigned to master valve 3 or greater do not reload their configuration correctly.

To recreate the issue:

  1. Set station S07 attribute to use master valve 1, 2 & 3
  2. Submit the changes
    --- At this time, reviewing the station configuration, or running the station shows that the M1, M2 & M3 are selected, and the call for the valves works properly in actual operation ---
  3. Reboot the OS by either unplugging the device or rebooting via interface.
  4. Open station S07 configuration.
    -- Witness that only M1, and M2 master valves are selected. Running the station results in only M1, and M2 being called/used correctly.

At this time, I am under the impression that the OS is not saving the attributes properly (or at all), but I am not sure where to begin fixing this.

Due to the how OS operates, I am not sure if I have an App coding issue, or a firmware coding issue. Because everything works correctly when configured with no reboot I'm inclined to believe it is a firmware issue that I'm experiencing.

I am glad to share the work/coding I've done, I am just not sure how to fork it here on GIT correctly.

Any advice or help would be appreciated.

image

image

Manually Control Master Solenoid

Hello,

I was wondering if it would be possible to manually control the master solenoid. I can't currently see a way to achieve this within the "Manual Control" section.

The reason behind this:
The master valve is between the bore pump and the rest of the watering system. The watering system includes taps and hoses which need to be turned on manually (not via the ospi). Currently to get around this, I need to enable one of the stations, just to use taps around the house.

Any suggestions would be appreciated.

Thanks,
Lachlan

iOS Weather doesnt display correctly

Hello OpenSprinkler comunity.

The app on iOS doesnt display correctly the weather card. That happened when i upgrade my OpenSprinkler for MQTT feature (im using OpenSprinkler on a raspberry pi 3B).
I got the version: 2.1.8 (4) and i upgrade it to the last one 2.1.9 (4)
Captura1

On desktop and bigger sceens such iPhone 6+ seems to be showing fine, but on small phones such iphone 5S and SE looks like this:

Im not sure about this but on the card, under the weather and temperature, it should be labeled the location. Something like

Sunny 21°C
Your City, Country

But on desktop is something like this:
Captura

I double check my location configuration and Time zone and its all ok.

Baseline ETo not saved

I try to calibrate Wethermethod "Eto", the calibration window has a button "Detect baseline ETo". When I press it, it says "Detected baseline ETo for configured location is 3.05mm/day".
So I press ok - but then BaseLine Eto value returns to 0.
So I try to edit it directory. I enter "3.05" - but then the borders gets red and value is 0.
Same thing with "Elevation" - manuell editing returns to 0.

When I enter baseline=3 and elevation=110 it works. But when I reopen the calibration dialog, value is 0 again.
App Version: 2.1.7
Firmware: 2.1.9 (1)
Hardware Version: OSPI

Log sorting

In the logs under Table, all events are sorted by the order of their end times. I find this very confusing because I have some switch events that start one after the other and overlap. Is it possible to sort the events also in the order of their start times?

Network error

App displays "network error" shortly after connecting. I am still able to navigate to logs and other tabs while message is displayed, however I'm unable to issue run once commands, etc. When i attempt to perform a run once command, it seems like it times out. I am able to go to the opensprinkler web server using web browser and issue commands from there without any problem.
Raspberry Pi
Linux ospi 4.9.79+ #1086

Note 8
Android version 7.1.1 on Note 8.
Kernel 4.4.21-12461033.

Password change with android app using special characters hides onscreen-keyboard

I can't use special characters on my Android device for the OpenSprinkler password (Firmware 2.1.9 (3))
How to reproduce:

  1. Start "OpenSprinkler" app with android device
  2. Left top menu, select "Change Password"
  3. Now onscreen keyboard is showing.
  4. When typing the [123] key, keyboard is closed.

I think there is a new focus event for the password field, so onscreen keyboard is closed.
When clicking on [123] key, the size of the keyboard is changing, moving the password dialog up. It looks like that this triggers the focus event.

Spanish UI Translate

Hello!

The web interface and also the App (using from the App store) have a little confusing mistake on the translation English-Spanish.

Mainly on the metric units as time.
Seconds, Minutes, Hours
Segundos, Minutos, Horas
(seg),(min),(h)
respectively

On the image you see a "Run once" set up when i set 20minutes (min) it appears like "20lu"
Seconds appears like "do" but for a better and correct understanding would be "seg"

Captura

Captura1

The mobile App appears the same

German localisation

Hi!

I'm from Austria and I'd like to ask how I may support you in translating "Sprinklers" to German (I guess it's not done by simply adding a "de,json" file)? Thanks!

Cheers
// Clemens

Repeating program calculation does not correctly handle non-sequential stations

When I program a mix of sequential and non-sequential stations, the app throws a warning when I try to save and the repeating interval is less than the total back-to-back run time of all the stations, even if some will be on concurrently.

image

In the image "Cl" is a non-sequential station, the others are all sequential. There is 0s gap between stations. If the repeat period is 2 hours, the app gives the warning, if I increase it to 2:05 the warning does not appear. I have tried 2:01, 2:02 etc in case there is some unaccounted for delay I am unaware of, but the warning still occurs until the repeat interval equals the total back-to-back run time.

The program preview page handles non-sequential stations correctly, and they switch on and off as intended.

Zoom log timeline

I work with relatively short but more frequent watering cycles. In the logs under Timeline, these times therefore only appear as short dashes. In the web interface on the PC, I can scroll here with the mouse wheel and thus spread the time axis until I have a resolution down to the minute range.

In the Android app and in the web interface on the smartphone, unfortunately, this does not work at first. A horizontal slide gesture is only evaluated as a horizontal shift. A zoom - gesture enlarges the screen as a whole, but does not lead to any spreading of the timeline. This is probably an Android - problem, because no scroll event is triggered by the gesture control (Timeline.jpg - left).
Timeline

If I now connect a mouse to my smartphone, the spreading of the timeline via scrolling with the mouse wheel works the same way as on the PC (Timeline.jpg - right). In principle, the app can evaluate a scroll event in the same way as the web interface.

In a further development of the app, is there any thought of supporting the spreading of the timeline via a mechanism other than a scroll event so that you don't have to connect a mouse (or does this already exist)?

Add to fdroid

"F-Droid is a community-maintained software repository for Android, similar to the Google Play store. The main repository, hosted by the project, contains only free and open source apps."
Add means include it into the F-droid repo going through their process to get it's inclusion to the ecosystem they provide. While one can setup their own repo, and that is valid I think the default official f-droid repo would be the best in practice since it would reach the most individuals of the community unless one desires to setup their own which is more work but fine too. I think an individual repo is best for nightly builds in my opinion.
Here is a guide how to get started with F-droid including it onto the repo, thanks to the amazing powers of modern search engines: https://f-droid.org/en/docs/Submitting_to_F-Droid_Quick_Start_Guide/

Porting to other platforms?

Hello,

your code looks quite portable.
However, there is no version for my phone yet :(
Porting to Jolla SailfishOS (aka Maemo, Mer, Meego...) could probably be done easily using a qtwebview instance in main and pointing that to your index.html.
Are you interested in adding Jolla SailfishOS as an additional platform?
Thanks in advance,

Chris

any way to skip the next X hours?

For example it's raining right now, so I'd like to say "disable for the next 24h" or something along those lines.
Is there any way to do this, besides disabling all programs and remembering to enable them back on 24h later?

Cannot connect to ospi at FQDN or subdirectory of root

I'm trying to connect to my OSPi behind a reverse proxy hosted in a subdirectory. I've tried to enter the following in the IP field:

  • FQDN/ospi
  • FQDN/ospi/
  • FQDN:80/ospi
  • FQDN:80/ospi/

All with "use SSL" checked. can the IP field accept FQDNs or subdirectories? If not can support be added?

Mobile preview shows multiple copies of program

Not sure how to test this on my iPhone, but reported same issue here Dan-in-CA/SIP#25.

--- a/js/main.js
+++ b/js/main.js
@@ -2174,7 +2174,7 @@ function get_preview() {
               else if ((dt%2)!=1) return 0;
             }
         }
-        if(simminutes<prog[3] || simminutes>prog[4]) return 0;
+        if(simminutes<prog[3] || simminutes>=prog[4]) return 0;
         if(prog[5]===0) return 0;
         if(((simminutes-prog[3])/prog[5]>>0)*prog[5] == (simminutes-prog[3])) {
             return 1;

missing files

I believe two files are missing from the cs and js directories. home.js refers to app.js and app.css. I do not see those files anywhere. Am I missing them?

Adding image resets all other station names

Raspberry Pi Software version: SIP 3.1.53 (2016-08-19) (https://github.com/Dan-in-CA/SIP)
Using the Android App: OpenSprinkler 1.6.0

I had all 13 zones set up with custom names, but none had images.
Decided to set an image for zone 13. Took a picture, clicked "submit", and the names for zones 1-12 became the defaults S01, S02, etc. Zone 13, now with image, kept the proper name.

Thanks!

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.