Coder Social home page Coder Social logo

homebridgecontroller's People

Contributors

kraigm 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

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

homebridgecontroller's Issues

Unable to delete platform/accessory/plugin

All items in the left column (save the Hub) should be removable with the Delete key.

All removal operations should prompt the user with Discard / Cancel options.

Deleting platforms/accessories would modify the config.json

Deleting plugins would npm uninstall them. When deleting plugins, the UI should present a list of accessories/platforms that will also be removed with it โ€“ ie. the UI should also perform these remove operations on the users' behalf.

Log Homebridge crashes

It would be nice if the controller app can log any homebridge crashes and show the uptime of the process before it crashed along with the exact error message that was given when it crashed. This way it would make it easier to try and determine the rooted cause behind errors. This would still allow the user to have homebridge that is always running but still allow for debugging of errors without having to scroll through pages of the log looking for the moment it crashed. Thanks!

Top-level indicator when updates are ready

Currently, you have to tab into a plugin's plugin-info tab, or detail view, to see if an update is available. It'd be nice to indicate that an update is ready with a dot (or the like) on the far right of the plugin in the left column.

How to use when installed new plugin manually

Hi,
right now my setup on RPi need to be "sudo npm install ....", but it can run homebridge as the "pi" user.
This means that it fails to install plugins from inside the interface.
So now I install the plugins by hand from ssh to the RPi, is there a way I reload the homebridge setup without restarting the HomeBridgeController?

Quick-open common homebridge paths

It'd be nice, within the controller UI, to be able to quickly get to :

  • The config.json file (in-app editor of the entire file, and/or link to open the file/view in finder)
  • The .homebridge directory
  • The node_modules folder

Notify user when no hubs are currently available

Current when no Homebridge process is found it just displays a blank screen. It would be nice if it displays some sort of error message. I think it would look cleaner if it wasn't a popup error but rather inline on the same windows that if a homebridge process was found would be displayed on.
Currently Displayed
Where I think it would look good to put the error

Add the ability to view the HomeBridge logs

There are several times I have wanted to be able to view the homebridge logs without having to mess with redirecting the logs when starting up homebridge, ssh'ing into my RPi, and viewing the files with nano or tail.

I would much rather just open up the app and scroll through the logs or old logs.

It would be really awesome to live update the current logs, to watch the logs as I'm messing with HomeKit.

Disable Platforms/Accessories without losing their configs

This might just be a personal problem (as a homebridge plugin dev), but I am constantly enabling and disabling of plugins for testing. I have also had cases where I need to disable a platforms that where causing issues (like when the Nest servers went down and it took out everyone's homebridge).

I figure we can use a simple checkbox on the app to move the config to an array that homebridge is not looking for. That way all your configurations remain in tact, but homebridge will not see them.

Run homebridge as sudo

Some plugins (eg. AmazonDash) requires sudo privileges, it'd be nice to be able to do this within homebridge-controller.

Add Progress Indication to Installations

Right now when you install/update plugins or update the hub, it just spins without any indication of how far along it is. We need some better way to display that.

On #24, a new installation status system was created, so that could be expanded to provide other progress info (last logs of the installation, percent complete, etc).

Retitle buttons : Save / Discard Changes

The words 'Upload' and 'Revert' do make sense, but only after sitting and pondering for a moment. For example, there is no file actually being 'uploaded.'

Save Changes and Discard Changes may be clearer strings to use.

Auto-Update Feature

It'd be nice if HomeBridge had an 'Update All' and/or Auto-Update feature to keep my plugins always updated w/out any effort.

This feature should be off by default, but discoverable, as some setups require homebridge never be restarted.

It is possible to update the plugins automatically and present the user with a 'Restart Homebridge' button, similar to how OS X downloads updates then tells the user when it's time to reboot. Personally, I'd want the updates to be installed, and homebridge restarted, all on its own as a moment of downtime is inconsequential.

Add OAuth process for plugin setup

We need a way to setup the app to collect OAuth tokens (i.e. have built in client/secret and handling for redirects). That way plugins can use API's that require developer accounts (like Nest) without making users create there own.

LinkVersion check is failing

If your hub's installed link version is too old, instead of giving you a message telling you to upgrade, it silently does nothing.

Ability to Change Between Different Homebridge Instance w/out Restart

Currently when wanting to switch between different homebridge instances you must restart the application to then connect to the newest hub. If you want to switch back to interacting with the first instance you have to repeat the entire process which can become annoying when dealing with numerous times in a row. Therefore the ability for it to be constantly looking for homebridge instances even after already connecting to one would then allow for the switch between homebridge instances without a restart. Alongside this would be the ability for Homebridge controller to save the pairing pins assigned to different homebridge instances.

Notifications

The ability to be notified in some form by the application when 1 it encounters a crash or 2 when it encounters an error. Maybe you could click the notification and then be directed to the log file to the line where the error occurred. If you could be notified on the computer you are running the Homebridge Controller on that would be great. Depending on the timeline for a mobile app to be released, which I assume would also support notifications for the mobile device natively, I would want to add some sort of mobile notification service at the current moment to send notifications through a service such as pushbullet(Open to other ideas on the delivery service). Anyone else have any ideas for this?

UI Issue when you have too many platforms/accessories

From tannebil:
"There's a UI glitch as well. If the number of items in the left pane is longer than the window, the "+" and "-" controls float over the windows making it way too easy to clock on them rather than the item underneath."

hbc-1_480

Error from Logger connection

System.ArgumentNullExceptionArgument cannot be null. Parameter name: Key
Raw
System.Security.Cryptography.SymmetricAlgorithm.set_Key(byte[] value)
Enferra.HomeBridgeController.Application.AccessKey.get_AccessKeyCrypto()
Enferra.HomeBridgeController.Application.AccessKey.EncryptData(string data)
Enferra.HomeBridgeController.Application.AccessKey.CreateToken()
Enferra.HomeBridgeController.Application.RemoteHomeBridgeLinkDriver.CreateRequest(PingRequest request)
Enferra.HomeBridgeController.Application.RemoteHomeBridgeLinkDriver.PingAddressAsync()
Enferra.HomeBridgeController.Application.RemoteHomeBridgeLinkDriver.ConnectAsync()
Enferra.HomeBridgeController.Application.SocketIOLogDriver.ConnectAsync()
Enferra.HomeBridgeController.Application.HubPickerViewController.AttemptToConnectAsync()

Localize app

We have homebridge users from all over the world, so it would be good to make the app localized.

TypeError: undefined is not a platform

I recently installed the plugin using sudo npm -g...., edited the config.json file to add the platform and when home bridge starts I get the following error:

Initializing HomeBridgeControllerLink platform....
/usr/local/node_modules/homebridge-controllerlink/lib/logger.js:83
var breakline = (c + ' ').repeat(10);
|
TypeError: undefined is not a function
at getBreakString (/usr/local/lib/node_modules/homebridge=controllerlink/lib/logger.js:83.28)

Any suggestions would be appreciated.

Relationships between plugins, platforms, and accessories

This is a complicated problem, actually.

The UI for installed plugins is a bit bare, it'd be nice if within the UI, any associated platforms or plugins were presented. This could quickly give the user an overview of which plugins are being utilized, and which are not, or a tally of how many of their accessories belong to which plugins.

Perhaps in this view there could also be an additional location to add a new accessory, where the user would not be prompted for which type, but it'd be inferred.

Double-clicking any platform or accessory in this view would pop them into the accessory/platform's detail view.

Ability to turn accessory off/on

Within HomeKit Accessory Simulator, there exists the concept of reachability. It'd be nice to be able to turn an accessory off, without stopping homebridge.

I'm not sure if homebridge offers this functionality for us to expose currently?

This is a subtle difference from disabling plugins/accessories/platforms which will remove them from homebridge's config altogether.

This might only be marginally useful, likely shouldn't be prioritized.

Properly load new available plugins

Right now it requires an update to refresh the list of plugins, do to the fact that npm search involves a complete local index of all the things on npm (no I'm not even joking, they download meta data on every single package on the npm registry).

To start, I might just throw a JSON file on S3 that I update, but if anyone else has any better ideas I would love to hear it.

Better handle long running installs

When an install takes too long, the request will timeout and appear to fail.

We can try to integrate with the http continue functionality (possibly).

Another way would be to just send back success when it has started and build another way to check the status.

Ultimately it would also be good to show a progression for the install, but if we handle the continue then we can just create another feature request for the progression.

HomeBridgeController Crashing Homebridge on start

'Error: The requested platform 'HomeBridgeControllerLink' was not registered by any plugin.
Feb 15 19:54:08 HomeBridge homebridge[1012]: at API.platform (/usr/lib/node_modules/homebridge/lib/api.js:88:13)
Feb 15 19:54:08 HomeBridge homebridge[1012]: at Server._loadPlatforms (/usr/lib/node_modules/homebridge/lib/server.js:194:45)
Feb 15 19:54:08 HomeBridge homebridge[1012]: at Server.run (/usr/lib/node_modules/homebridge/lib/server.js:35:36)
Feb 15 19:54:08 HomeBridge homebridge[1012]: at module.exports (/usr/lib/node_modules/homebridge/lib/cli.js:23:16)
Feb 15 19:54:08 HomeBridge homebridge[1012]: at Object. (/usr/lib/node_modules/homebridge/bin/homebridge:17:22)
Feb 15 19:54:08 HomeBridge homebridge[1012]: at Module._compile (module.js:410:26)
Feb 15 19:54:08 HomeBridge homebridge[1012]: at Object.Module._extensions..js (module.js:417:10)
Feb 15 19:54:08 HomeBridge homebridge[1012]: at Module.load (module.js:344:32)
Feb 15 19:54:08 HomeBridge homebridge[1012]: at Function.Module._load (module.js:301:12)
Feb 15 19:54:08 HomeBridge homebridge[1012]: at Function.Module.runMain (module.js:442:10)
Feb 15 19:54:08 HomeBridge homebridge[1012]: at startup (node.js:136:18)
Feb 15 19:54:08 HomeBridge homebridge[1012]: at node.js:966:3'

I have removed the node package, tried downloading from git and installing manually. Nothing is working. My only option right now is to remove the platform reference from the config.json
Any suggestions?

Null Ref

System.NullReferenceExceptionObject reference not set to an instance of an object
Raw
Enferra.HomeBridgeController.Application.HomeBridgeService<RemoteHomeBridgeLinkDriver, RemoteHomeBridgeLinkDriver.Connection>.c__asyncF.MoveNext()
Enferra.HomeBridgeController.Application.HubEditorFlowController.SideBarViewController.AddAccessory()

Health status of homebridge visible in UI

It'd be nice to have a little red / green dot beside the 'hub' in the UI to indicate if it's running well, or is currently unloaded. If it's unloaded, clicking on the red dot would offer to start it. If it's green, clicking on the green dot would offer to restart it.

I'm not sure if it's possible to detect unhealthy states of homebridge, for example if it's currently hung / crashed, though if so, it'd be nice to reflect that as orange/red, encouraging the user to address it.

Enhance Locating/Selecting/Connecting to HomeBridge

Right now, HomeBridge Controller just starts listening for a hub. Once it finds it, it tries to use the configured pin to see if it is authorized. If not, it will just keep spinning. So you are unable to connect, you don't know if its because:
A: The HomeBridge is off or doesn't have the plugin installed
B: The HomeBridge pin is incorrect and you need to try again
C: There are multiple HomeBridge's on your network and it is trying to connect to the wrong one

My thought on how to enhance this (and move towards a much more advance system) is to go true Bonjour style (like Apple Remote app). I figure we can display a view to browse for HomeBridges on the network and display any that pop up. Then you can select which one you want and it will try to connect.

For now, I think I will keep using just a single stored pin. When connecting, it will attempt to use that pin. If it ends up not working, prompt for the hub pin.

Make it clear when a user has unsaved changes

I was modifying a plugin and didn't realize why it wasn't taking effect when I relaunched homebridge. After a bit, I realized it was because I didn't hit Cmd+S. It'd be nice if Homebridge Controller detected when there were unsaved changes, made this visible in the UI, and offered the user the option to save it, and also the option to save it / relaunch homebridge (if necessary).

Upload Config : Always keep backup

Since a program is doing the updating anyway, it'd be nice if the previous version, or several previous versions, were maintained on disk in the event the user hit 'Upload Config' by accident and lost stuff.

AutoSave not finishing before close starts

System.NullReferenceExceptionObject reference not set to an instance of an object
Raw
Enferra.HomeBridgeController.Application.HomeBridgeService<RemoteHomeBridgeLinkDriver, RemoteHomeBridgeLinkDriver.Connection>.AutoSaveDocAsync(HomeBridgeConfig config)
Enferra.HomeBridgeController.Application.HomeBridgeService<RemoteHomeBridgeLinkDriver, RemoteHomeBridgeLinkDriver.Connection>.AutoSaveConfig()
Enferra.HomeBridgeController.Application.HubEditorFlowController.AutoSaveConfig()

Add a "Name" field

Currently if you have multiple accessories that use the CMD plugin they only show as CMD. It would be nice if there was either a rename capability or the option to add a "Name" Next to the CMD plugin. This way accesories in you Config can be more accurately described for what they do.
What it currently displays

Raw Settings View : Syntax checking

Prior to uploading the config, it'd be nice if the app verified that the config would actually work by, at the very least, matching all brackets and highlighting issues.

Run homebridge on boot

It'd be nice if homebridge-controller had the option to run homebridge on boot (with or without launching the homebridge controller UI).

Version number fails to encode and/or decode when in country that uses commas for decimals

Hello, I've installed the latest Controller App on my Mac and the Latest plugin on my Pi. The Plugin is implemented into the config.json and is starting up without errors. It is visible in the Controller on my Mac. But as soon as i klick on the HomeBridge within the GUI, this Message Pops up.

"Upgraded Plugin Required
You must install at least version 0.4.0 of the homebridge-controllerlink plugin."

bildschirmfoto 2016-03-24 um 12 38 17

As Mentioned above, i have installed the latest Plugin which is 0.5.0
All my other HomeBridge devices work like always and are responding the same as before i installed HomeBridgeController.
Any suggestions?

Install Plugins View : Search/filter plugins

If I know the name of the plugin I want to add, it'd be nice to filter for it and have only items matching my filter show up in the list. Saves from scrolling and searching :)

Error When Running Node 5.9.1

I have a "process out of memory error" when running node 5.9.1 and trying to run the link plugin. I have attached the log below. When I removed the controllerlink from the config.json it started working again. I found online others seemed to encounter similar issues using node version 5.70+( Click here)

Last login: Thu Mar 24 21:31:53 on ttys000
appletechy:~ appletechy$ DEBUG=* homebridge -D
[3/24/2016, 9:33:27 PM] Loaded plugin: homebridge-cmd
[3/24/2016, 9:33:27 PM] Registering accessory 'homebridge-cmd.CMD'
[3/24/2016, 9:33:27 PM] ---
[3/24/2016, 9:33:27 PM] Loaded plugin: homebridge-controllerlink
[3/24/2016, 9:33:27 PM] Registering platform 'homebridge-controllerlink.HomeBridgeControllerLink'
[3/24/2016, 9:33:27 PM] ---
[3/24/2016, 9:33:27 PM] Loaded plugin: homebridge-harmonyhub
[3/24/2016, 9:33:27 PM] Registering platform 'homebridge-harmonyhub.HarmonyHub'
[3/24/2016, 9:33:27 PM] ---
[3/24/2016, 9:33:27 PM] Loaded plugin: homebridge-liftmaster
[3/24/2016, 9:33:27 PM] Registering accessory 'homebridge-liftmaster.LiftMaster'
[3/24/2016, 9:33:27 PM] ---
[3/24/2016, 9:33:28 PM] Loaded plugin: homebridge-nest
[3/24/2016, 9:33:28 PM] Registering platform 'homebridge-nest.Nest'
[3/24/2016, 9:33:28 PM] ---
[3/24/2016, 9:33:28 PM] Loaded plugin: homebridge-onkyo-avr
[3/24/2016, 9:33:28 PM] Registering accessory 'homebridge-onkyo-avr.OnkyoAVR'
[3/24/2016, 9:33:28 PM] ---
[3/24/2016, 9:33:28 PM] Loaded plugin: homebridge-platform-wemo
[3/24/2016, 9:33:28 PM] Registering platform 'homebridge-platform-wemo.BelkinWeMo'
[3/24/2016, 9:33:28 PM] ---
[3/24/2016, 9:33:28 PM] Loaded plugin: homebridge-wink
[3/24/2016, 9:33:28 PM] Registering platform 'homebridge-wink.Wink'
[3/24/2016, 9:33:28 PM] ---
[3/24/2016, 9:33:28 PM] Loaded config.json with 7 accessories and 5 platforms.
[3/24/2016, 9:33:28 PM] ---
[3/24/2016, 9:33:28 PM] Loading 5 platforms...
[3/24/2016, 9:33:28 PM] Initializing Nest platform...
[3/24/2016, 9:33:28 PM] Fetching Nest devices.
[3/24/2016, 9:33:28 PM] [WeMo Platform] Initializing BelkinWeMo platform...
[3/24/2016, 9:33:28 PM] [Wink] Initializing Wink platform...
[3/24/2016, 9:33:28 PM] [Wink] Fetching Wink devices.
wink:http http options +0ms { hostname: 'winkapi.quirky.com',
port: 443,
path: '/oauth2/token',
method: 'POST',
headers: { 'Content-Length': 175, 'Content-Type': 'application/json' } }
wink:http http data +15ms { host: 'winkapi.quirky.com',
path: '/oauth2/token',
data: '{"client_id":"[Removed]","client_secret":"[removed]","username":"[removed]","password":"[removed]","grant_type":"password"}',
method: 'POST' }
[3/24/2016, 9:33:28 PM] [Harmony Hub] Initializing HarmonyHub platform...
[3/24/2016, 9:33:28 PM] [Harmony Hub] Searching for Logitech Harmony remote hubs...
harmonyhubjs:discover:explorer Explorer(61991) +0ms
harmonyhubjs:discover:ping Ping(61991) +1ms
harmonyhubjs:discover:explorer start() +1ms
harmonyhubjs:discover:responsecollector ResponseCollector(61991) +0ms
harmonyhubjs:discover:responsecollector start() +1ms
harmonyhubjs:discover:ping start() +0ms
[3/24/2016, 9:33:28 PM] Initializing HomeBridgeControllerLink platform...
express:application set "x-powered-by" to true +0ms
express:application set "etag" to 'weak' +1ms
express:application set "etag fn" to [Function: wetag] +1ms
express:application set "env" to 'development' +0ms
express:application set "query parser" to 'extended' +0ms
express:application set "query parser fn" to [Function: parseExtendedQueryString] +0ms
express:application set "subdomain offset" to 2 +0ms
express:application set "trust proxy" to false +0ms
express:application set "trust proxy fn" to [Function: trustNone] +1ms
express:application booting in development mode +1ms
express:application set "view" to [Function: View] +0ms
express:application set "views" to '/Users/appletechy/views' +1ms
express:application set "jsonp callback name" to 'callback' +0ms
express:router use / query +11ms
express:router:layer new / +1ms
express:router use / expressInit +0ms
express:router:layer new / +1ms
express:router use / jsonParser +1ms
express:router:layer new / +0ms
express:router:route new /plugins +0ms
express:router:layer new /plugins +1ms
express:router:route get /plugins +0ms
express:router:layer new / +0ms
express:router:route new /plugins +0ms
express:router:layer new /plugins +1ms
express:router:route post /plugins +0ms
express:router:layer new / +0ms
express:router:route new /plugins/available +0ms
express:router:layer new /plugins/available +0ms
express:router:route get /plugins/available +0ms
express:router:layer new / +0ms
express:router:route new /config +0ms
express:router:layer new /config +0ms
express:router:route get /config +0ms
express:router:layer new / +0ms
express:router:route new /config +1ms
express:router:layer new /config +0ms
express:router:route post /config +0ms
express:router:layer new / +0ms
express:router:route new /hub +0ms
express:router:layer new /hub +0ms
express:router:route get /hub +0ms
express:router:layer new / +0ms
express:router:route new /hub +0ms
express:router:layer new /hub +0ms
express:router:route post /hub +0ms
express:router:layer new / +0ms
express:router:route new /install/status +0ms
express:router:layer new /install/status +1ms
express:router:route get /install/status +0ms
express:router:layer new / +0ms
express:router:route new /ping +0ms
express:router:layer new /ping +0ms
express:router:route get /ping +0ms
express:router:layer new / +0ms
express:router use /log/live +0ms
express:router:layer new /log/live +2ms
express:router use /log +0ms
express:router:layer new /log +0ms
express:router use / router +0ms
express:router:layer new / +0ms
express:router:route new /log +0ms
express:router:layer new /log +0ms
express:router:route get /log +0ms
express:router:layer new / +0ms
[3/24/2016, 9:33:28 PM] Loading 7 accessories...
[3/24/2016, 9:33:28 PM] [ Single Bay Garage Door] Initializing LiftMaster accessory...
[3/24/2016, 9:33:28 PM] [ Main Garage Door] Initializing LiftMaster accessory...
[3/24/2016, 9:33:28 PM] [FR Onkyo Reciever] Initializing OnkyoAVR accessory...
[3/24/2016, 9:33:28 PM] [FR Onkyo Reciever] start long poller..
[3/24/2016, 9:33:28 PM] [History Channel] Initializing CMD accessory...
[3/24/2016, 9:33:28 PM] [Food Network] Initializing CMD accessory...
[3/24/2016, 9:33:28 PM] [Discovery Channel] Initializing CMD accessory...
[3/24/2016, 9:33:28 PM] [News] Initializing CMD accessory...
[3/24/2016, 9:33:28 PM] [WeMo Platform] Server Listening...
socket.io:server initializing namespace / +62ms
socket.io:server creating engine.io instance with opts {"path":"/socket.io"} +1ms
socket.io:server attaching client serving req handler +3ms
<--- Last few GCs --->
12739 ms: Mark-sweep 1403.7 (1439.2) -> 1403.9 (1441.2) MB, 52.5 / 0 ms [last resort gc].
12754 ms: Scavenge 1406.4 (1441.2) -> 1406.4 (1441.2) MB, 8.4 / 0 ms [allocation failure].
12760 ms: Scavenge 1406.4 (1441.2) -> 1406.4 (1441.2) MB, 4.5 / 0 ms [allocation failure].
12813 ms: Mark-sweep 1406.4 (1441.2) -> 1406.4 (1441.2) MB, 52.5 / 0 ms [last resort gc].
12874 ms: Mark-sweep 1406.4 (1441.2) -> 1406.4 (1441.2) MB, 61.5 / 0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 0x1fbcf2be3ac1
1: stringify [native json.js:160] [pc=0x3cf4c1b3a8e4](this=0x1fbcf2bdb8a1 <a JSON with map 0x3034ca40a7c9>,u=0x1fbcf2bf8d01 <an Object with map 0x13fbb57e8ef9>,v=0x1fbcf2b04189 ,I=0x1fbcf2b04189 <undefined)
2: arguments adaptor frame: 1->3
3: tryStringify(aka tryStringify) [util.js:14] [pc=0x3cf4c1befff1] (this=0x1fbcf2b04189 ,arg=0x1fbcf2bf8d01 <an Object wi...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
Abort trap: 6

Loading npm info is slow when using a machine like RPi

Unfortunately the npm calls are taxing on RPi (they fully admit their api is slow). We need to either find a way to optimize the meta info refresh (like just pulling exactly what you need) or we need to move that to the app, or both.

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.