Giter Club home page Giter Club logo

volumio2's Introduction

Build Status dependencies Open Source Love License: GPL v3 Awesome js-semistandard-style Volumio

Volumio is an headless audiophile music player, designed to play music with the highest possible fidelity. Volumio runs on most embedded devices (Raspberry Pi, UDOO, Odroid, Cubieboard, Beaglebone, Pine64, Allo Sparky...) and on any ordinary PC (x86).

Volumio 2 System Images

LATEST

Logins

  • user : volumio
  • password : volumio

Root login via ssh has been disabled by default, however user volumio can become root.

Resources

Developers are welcome! Check out the resources:

Volumio 2 Virtual Machines

Some VM images are available, although they're not always kept up-to-date. It can be an alternative to developing directly on target (Raspberry Pi, or whatever).

VMWARE Image is suggested, as Network configuration is tricky with Virtual Box

System Images built with Volumio Builder

volumio2's People

Contributors

apinner avatar ashthespy avatar balbuze avatar callenberg avatar crieke avatar falu avatar fanciulli avatar ghembs avatar gilphilbert avatar greenkeeperio-bot avatar hoochdeveloper avatar howardqiao avatar jo-me avatar jomo avatar jotam avatar leoncb avatar liberatorcnx avatar macmpi avatar majko96 avatar mpasteur avatar mtieltjes avatar opiokane avatar piffio avatar saiyato avatar shawaj avatar stranskj avatar taudac avatar therealmattiasjohansson avatar volumio avatar xipmix 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  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

volumio2's Issues

subsonic music server

I know you're just doing ground work right now, but as a long time subsonic user I've just seen they integrated with Sonos devices, and since the have a well documented api, it shoud be "fairly" easy to implement.
http://www.subsonic.org/pages/sonos.jsp
And as subsonic supports lossless streaming I think it's a perfect fit.
http://www.subsonic.org/pages/api.jsp

If there's noone willing to do it you could at least verify if it is possible or point me in directions where to start. Got a little node experience myself!

Code style

I noticed there's tabs and spaces mixed all over the place. Can we agree on a style to use everywhere?
My editor (sublime text + eslint) also starts highlighting every other line because there's missing semicolons or other issues.

screenshot

I personally prefer 2 spaces for indentation, I think that's what most node projects seem to use as well.
I recommend that everyone uses eslint. There are lots of integrations for different editors.

Add license information

What license is this distributed under?
MIT?

Please add a license file so it is clear how contributions and forks are positioned in a legal context.

Make volumio a requireable npm module.

I would suggest making volumio an requireable npm module with automated deploy using travis for extending volumio.

I have registered the "volumio" package name on npm before it is snatched up by some project unrelated package.

Use Logartithmic volume

var math = require('mathjs');

To set (log100, x):
Volume.vol = Math.round(math.log(VolumeInteger, 100)*100);
To get(inverse log base 100, x):
Volume.vol = Math.round(Math.pow(100, (vol/100)));

A rework of the entire get and set, with push state is also needed (too slow and redundant)

WebUI or dev console

Hi!
Sorry to ask, but even with a fresh install, I can't connect to webUI (still known problem?)
dev console was ok until I reboot...and now no more access.

npm install error on cookie-parser

I ran npm install as non-sudo user. Seems cookie-parser failed to install

I know you don't run the NPM, I'm filing a bug there.. but just giving a heads up.

Error on playback configuration

By editing conf on playback configuration, we receive this error:
Missing error handler on socket.
Error: The value [object Object] is not a number
at Error (native)
at Config.forceToType (/volumio/node_modules/v-conf/index.js:157:44)
at Config.set (/volumio/node_modules/v-conf/index.js:79:25)
at ControllerMpd.savePlaybackOptions (/volumio/app/plugins/music_services/mpd/index.js:651:14)
at CoreCommandRouter.executeOnPlugin (/volumio/app/index.js:340:28)
at Socket. (/volumio/app/plugins/user_interfaces/websocket/index.js:407:31)
at Socket.emit (events.js:110:17)
at Socket.onevent (/volumio/node_modules/socket.io/lib/socket.js:330:8)
at Socket.onpacket (/volumio/node_modules/socket.io/lib/socket.js:290:12)
at Client.ondecoded (/volumio/node_modules/socket.io/lib/client.js:193:14)

webUI unreachable

Despite the very latest update, I still can't reach the webUI. I have reflashed several times, remove /volumio folder, follow the instruction but the best I get is a "Cannot GET / " page in my web browser...
dev console works..

Support - Bluetooth speaker

I am planning to set up a kids music player. As for speakers I want to stream directly to bluetooth enabled speakers.

Please implement support for this.

Solve DNS uncaught error event

This is the error:

events.js:85
throw er; // Unhandled 'error' event
^
Error: dns service error: unknown
at Error (native)
at MDNSService.on_resolver_done (/volumio/node_modules/mdns/lib/resolver_sequence_tasks.js:19:30)
at SocketWatcher.MDNSService.self.watcher.callback (/volumio/node_modules/mdns/lib/mdns_service.js:18:40)

It's quite random

can't figure out how to point Volumio2 to my music

so I have an SSD drive connected via USB to a raspberry pi 2.

I have volumio 2 alpha distro running, and want to simply tell it.. "Hey Volumio2, all the music you need to find is in this direction ..... "

I clicked around and started to get into a bad state it would appear. Using the latest Chrome on OSX btw...
screen shot 2015-10-26 at 6 55 21 pm

WebUI Fails to Receive State Push

I think I see what happened - my fault ๐Ÿ˜ณ

I had changed the names of the websocket events during an effort to simplify the websocket interface plugin. When it was decided to revert to the old version, I reverted the names of the events which are listened for, but forgot to revert the names of the events which are emitted. Thus volumioPushState is currently pushState.

Now that we have a chance to re-examine these event names, I think we can strip the "volumio" prepended to each event. This was used back in the day when direct commands were also sent to spop and MPD. Now that the clients only talk to Volumio, the extra tag is no longer needed. Thus, volumioPlay becomes just play, and so on. I'll also change getLibraryIndex to getLibraryFilters per request.

I will update the websocket API in the wiki to reflect the new configuration.

Image of the system to install alpha on rPi

It would be amazing to have a starting point ready.
An image with drivers, preinstalled NodeJS etc. Anything which would be required to simply follow installation steps from Readme

Error while installing packages through npm install

I tried to install the latest dev code for volumio 2 on my Raspberry Model B+ (RPI 1) and got the following as the command "npm install" was running:

> mdns@2.2.9 install /home/pi/volumio/node_modules/mdns
> node-gyp rebuild

gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/0.10.28"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/home/pi/volumio/node_modules/mdns/.node-gyp"
gyp http GET http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz
gyp http 200 http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz
gyp http GET http://nodejs.org/dist/v0.10.28/SHASUMS.txt
gyp http GET http://nodejs.org/dist/v0.10.28/SHASUMS.txt
gyp http 200 http://nodejs.org/dist/v0.10.28/SHASUMS.txt
gyp http 200 http://nodejs.org/dist/v0.10.28/SHASUMS.txt
make: Entering directory '/home/pi/volumio/node_modules/mdns/build'
  CXX(target) Release/obj.target/dns_sd_bindings/src/dns_sd.o
In file included from ../src/dns_sd.cpp:1:0:
../src/mdns.hpp:32:20: fatal error: dns_sd.h: No such file or directory
compilation terminated.
dns_sd_bindings.target.mk:131: recipe for target 'Release/obj.target/dns_sd_bindings/src/dns_sd.o' failed
make: *** [Release/obj.target/dns_sd_bindings/src/dns_sd.o] Error 1
make: Leaving directory '/home/pi/volumio/node_modules/mdns/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:807:12)
gyp ERR! System Linux 3.18.11+
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/volumio/node_modules/mdns
gyp ERR! node -v v0.10.28
gyp ERR! node-gyp -v v0.13.0
gyp ERR! not ok 
npm ERR! mdns@2.2.9 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the mdns@2.2.9 install script.
npm ERR! This is most likely a problem with the mdns package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls mdns
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 3.18.11+
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! cwd /home/pi/volumio
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.9
npm ERR! code ELIFECYCLE
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/pi/volumio/npm-debug.log
npm ERR! not ok code 0

New Jessie Based RootFS

Creating new RootFS (base system) on Debian Jessie, with Build Script to allow fast creation of images for every platform.

Logs

A log file is much needed when running volumio through systemctl. Just redirecting output to /var/log/something would be great

Setup of the dev environnement: error

Hello,
I am trying to setup the dev environnement with vmware and got an issue on npm install. Here are the steps i follow:

And got the following error:

volumio@volumio:~/volumio$ npm install
npm ERR! Linux 3.16.0-4-686-pae
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "install"
npm ERR! node v0.12.0
npm ERR! npm  v2.5.1
npm ERR! code ETARGET

npm ERR! notarget No compatible version found: ip@'>=2.11.2 <3.0.0'
npm ERR! notarget Valid install targets:
npm ERR! notarget ["0.0.1","0.0.2","0.0.3","0.0.4","0.0.5","0.1.0","0.2.0","0.3.0","0.3.1","0.3.2","0.3.3"]
npm ERR! notarget 
npm ERR! notarget This is most likely not a problem with npm itself.
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/volumio/volumio/npm-debug.log

npm-debug.log: http://pastebin.com/LZCefXWQ

Thank you.

Album art not stable enough

Albumart server crashes, the behaviour seems to happen when we sequentially add lot of items to queue.
I suspect this is due to lack of / in the web art path

Seek as Standalone Object

We should have a seek object that states the current seek position for the current service.

Ideally the WS api will look like this:

pushSeek (to update seek, maybe every 1000ms, or when the second change)

setSeek (to jump over time in a track, rounded to seconds)

Use Vagrant

In case you're not familiar with Vagrant, it basically lets you set up a VM that you can configure to contain all dependencies. It syncs your (git) project folder with the VM so you can make changes on your machine and they affect the VM immediately.
You can forward the network ports required for the project and connect to the VM via SSH.

This creates a "lightweight, reproducible, and portable development environment".
I believe it could make development a lot easier.

Failing to install through npm install on debian jessie

# npm install
/
> [email protected] install /root/local/volumio2/node_modules/groove
> node-gyp rebuild

make: Entering directory '/root/local/volumio2/node_modules/groove/build'
  CXX(target) Release/obj.target/groove/src/groove.o
In file included from ../src/groove.cc:5:0:
../src/player.h:6:33: fatal error: grooveplayer/player.h: No such file or directory
 #include <grooveplayer/player.h>
                                 ^
compilation terminated.
groove.target.mk:91: recipe for target 'Release/obj.target/groove/src/groove.o' failed
make: *** [Release/obj.target/groove/src/groove.o] Error 1
make: Leaving directory '/root/local/volumio2/node_modules/groove/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/share/node-gyp/lib/build.js:267:23)
gyp ERR! stack     at ChildProcess.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:809:12)
gyp ERR! System Linux 3.16.0-4-686-pae
gyp ERR! command "nodejs" "/usr/bin/node-gyp" "rebuild"
gyp ERR! cwd /root/local/volumio2/node_modules/groove
gyp ERR! node -v v0.10.29
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok 
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian

npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the groove package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls groove
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 3.16.0-4-686-pae
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! cwd /root/local/volumio2
npm ERR! node -v v0.10.29
npm ERR! npm -v 1.4.21
npm ERR! code ELIFECYCLE
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /root/local/volumio2/npm-debug.log
npm ERR! not ok code 0

I have a bunch of groove packages installed (in particular the -dev) :

# dpkg -l *groove*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                      Version           Architecture      Description
+++-=========================-=================-=================-========================================================
ii  groovebasin               1.4.0-1           all               music player server with a web-based user interface
ii  libgroove-dev:i386        4.2.1-1           i386              audio dispatching library (development files)
ii  libgroove4:i386           4.2.1-1           i386              music player backend
ii  libgroovefingerprinter4:i 4.2.1-1           i386              acoustid fingerprinter for libgroove
ii  libgrooveloudness4:i386   4.2.1-1           i386              loudness scanner for libgroove
ii  libgrooveplayer4:i386     4.2.1-1           i386              hardware audio playback for libgroove
ii  node-groove               2.2.6-1           i386              bindings to libgroove - generic music player library - N
`

Output Stack

The basic idea is to support multiple/different output devices, e.g. send to AirPlay speakers.
See Output Stack on the wiki.
I actually planned to figure out and contribute this myself but then was too busy for it, so I'll just share my thoughts with you.

The idea is that each audio output implements a common interface โ€“ let's call it AudioOutput.
Every AudioOutput is initialized with an audio source and has a few very basic functions to enable, disable, setVolume, โ€ฆ

Volumio would output sound to a raw PCM stream, which is then passed as the audio source to all the outputs.
An OutputController enables or disables outputs and also calls setVolume for each of them.

Some output examples:

  • take the PCM stream and send it to local speakers via DAC
  • use node_airtunes to send the audio to AirPlay speakers.
  • convert to mp3 stream and make it accessible via HTTP

AirPlay is a great example because it shows two issues that I don't yet know how to solve:

Synchronizing
Especially remote speakers will have some delay before actually playing the audio, and you don't want your AirPlay speakers 5 meters away to hang 3 seconds behind the directly connected speakers.

AFAIK AirPlay buffers audio and plays it back delayed, while pause/resume is carried out as soon as it arrives at the AirPlay server. However, that issue could be solved by not using AirPlay's pause/resume feature and just silence the PCM stream when Volumio is paused. This will have the effect that music still plays for a few seconds after you hit pause, though.

Maybe enable could have a callback that includes the delay and OutputController can delay the source individually for each output to counter the latency?

Custom Options
Since you can select multiple AirPlay speakers, we need a way to pass this option to the end user.
Same goes for e.g. port options for the http server mentioned above.

Perhaps AudioOutput could have settings and a function that's called when they change?


I hope this made some sense ๐Ÿฐ

npm install fails

When doing npm install, it return errors

npm install
npm WARN package.json [email protected] No license field.
-
> [email protected] install /volumio/node_modules/mdns
> node-gyp rebuild

make: Entering directory '/volumio/node_modules/mdns/build'
  CXX(target) Release/obj.target/dns_sd_bindings/src/dns_sd.o
In file included from ../src/dns_sd.cpp:1:0:
../src/mdns.hpp:32:20: fatal error: dns_sd.h: No such file or directory
 #include <dns_sd.h>
                    ^
compilation terminated.
dns_sd_bindings.target.mk:136: recipe for target 'Release/obj.target/dns_sd_bindings/src/dns_sd.o' failed
make: *** [Release/obj.target/dns_sd_bindings/src/dns_sd.o] Error 1
make: Leaving directory '/volumio/node_modules/mdns/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:269:23)
gyp ERR! stack     at ChildProcess.emit (events.js:110:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:1074:12)
gyp ERR! System Linux 3.18.6+
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /volumio/node_modules/mdns
gyp ERR! node -v v0.12.6
gyp ERR! node-gyp -v v2.0.1
gyp ERR! not ok 
npm ERR! Linux 3.18.6+
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v0.12.6
npm ERR! npm  v2.11.2
npm ERR! code ELIFECYCLE

npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! This is most likely a problem with the mdns package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls mdns
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /volumio/npm-debug.log

If I do "node index.js" it retruns
/volumio# node index.js
module.js:338
    throw err;
          ^
Error: Cannot find module './http/index.js'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:278:25)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/volumio/index.js:1:85)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)

No webUI and if I look in the process, node is eating plenty of cpu (on rpi B+ a total of 88% of cpu is used).
What am I doing wrong ?

Error on starting

While starting volumio via node index.js, it dies on missing dependency.

In f39237c there was added this line in http/restapi.js

var ifconfig = require('wireless-tools/ifconfig');

however wireless-tools is missing in package.json.

Add Libgroove Plugin

Evaluate the use of libgroove as a possible replacement for MPD. Reference andrewrk/libgroove#88.

Maybe make a script which conducts double-blind listening trials of some high resolution music files?

Divide dynamic title as Artist, title, album

We should obtain a DynamicTitle object, which will look like:

{"artist":"Nirvana","title":"Smells like Teen Spirits","album":"Nevermind"}

Ideally the WS API would be:

getDynamicTitle

pushDynamicTitle

build error in mdns-module

Compiling Volumio 2 from Git-Clone (01.09.2015) dies in compiling mdns, because dns_sd.h is missing:

> [email protected] install /volumio/node_modules/mdns
> node-gyp rebuild

child_process: customFds option is deprecated, use stdio instead.
make: Entering directory '/volumio/node_modules/mdns/build'
  CXX(target) Release/obj.target/dns_sd_bindings/src/dns_sd.o
In file included from ../src/dns_sd.cpp:1:0:
../src/mdns.hpp:32:20: fatal error: dns_sd.h: No such file or directory
 #include <dns_sd.h>
                    ^
compilation terminated.
dns_sd_bindings.target.mk:133: recipe for target 'Release/obj.target/dns_sd_bindings/src/dns_sd.o' failed
make: *** [Release/obj.target/dns_sd_bindings/src/dns_sd.o] Error 1
make: Leaving directory '/volumio/node_modules/mdns/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack     at ChildProcess.emit (events.js:110:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:1067:12)
gyp ERR! System Linux 3.16.0-4-686-pae
gyp ERR! command "node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /volumio/node_modules/mdns
gyp ERR! node -v v0.12.0
gyp ERR! node-gyp -v v1.0.2
gyp ERR! not ok 

npm-debug.log can be found here
https://jim.itmc.tu-dortmund.de/oc/index.php/s/VclhXbh8PHRit9d/download

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.