rello / audioplayer Goto Github PK
View Code? Open in Web Editor NEWAudio Player for Nextcloud and ownCloud
Home Page: https://rello.github.io/audioplayer
License: GNU Affero General Public License v3.0
Audio Player for Nextcloud and ownCloud
Home Page: https://rello.github.io/audioplayer
License: GNU Affero General Public License v3.0
Please see the changelog for all released versions and unreleased changes:
https://github.com/Rello/audioplayer/blob/master/CHANGELOG.md
The music libary should be filled with my upoaded music.
The popup with "searching for titles" coming up.
But if I click the button "start search" the progress bar is showing only a "0%" and nothing happend
Operating system:
Debian 8.5 (Raspbian)
Web server:
Apache2 2.4
Database:
MySQL 14.14
PHP version:
PHP 5.6.22
ownCloud/Nextcloud version: (see /status.php
)
Nextcloud 9.0.51.0
Updated from an older ownCloud/Nextcloud or fresh install:
Fresh installion
Where did you install Audio Player from:
directly out of the Nextcloud "Apps"
Are you using external storage, if yes which one: local/smb/sftp/...
internal storage
Are you using encryption: yes/no
yes, of course
Operating system:
Win 7 and Ubuntu 16.04
Browser:
Firefox in both operating systems
ownCloud/Nextcloud log (/data/[owncloud|nextcloud].log
)
Error PHP Cannot redeclare class getID3 at /var/www/html/nextcloud/apps/audioplayer/3rdparty/getid3/getid3.php#75 2016-09-14T14:41:09+00:00 dsadmin
Error PHP Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. at Unknown#0 2016-09-14T14:34:38+00:00 dsadmin
I think its would be an good feature if the little pen on the Album Level too. If you change the artist or the album name all mp3 files in the folder will be changed and the Album Cover too :-)
implement a view by artist - similar to playlist & genre
Hi there,
When clicking an audio file in the owncloud file browser i hear music but there are no controls at all.
This is a hindrance because it keeps playing and i cant stop it unless i reload the webpage or start another app.
Can you please make basic audio controls for this? (play, pause)
the sharing player is not working on all supported file types
the scanning progress bar is red in nextcloud due to a change in a css
nextcloud/server@e90931c
When scan for audio files, often stop scanning after some files.
oc:9.0.2
php:7.0.4-7ubuntu2.1
mysql:5.7.12
owncloud log:
Doctrine\DBAL\Exception\DriverException: An exception occurred while executing 'UPDATE
oc_audios_albumsSET
year= ?,
genre_id= ? WHERE
id= ? AND
user_id`= ?' with params ["", "4", "2340", "sbr"]: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'year' at row 1
0. /var/www/html/owncloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php - line 116: Doctrine\DBAL\Driver\AbstractMySQLDriver->convertException('An exception oc...', Object(Doctrine\DBAL\Driver\PDOException))
when scanning several files with different artists - but of the same album - the last one is used as album artist.
in this case, the "Various" should be used
Hello,
do you intend to support Ampache like in the old Music app? This could be useful to not have to sync all the music on a device using the sync client, instead only those played back and the playlist.
Thank you
the following features are not working correctly:
new feature:
when an artist is changed in the ID3 Tags, it is written to the corresponding album-artist table without deleting the old one.
this results in >1 Artists, which will result in as "Various Artists" display
when an alternative app folder (e.g. /apps2) is used, icons are not shown correctly
For each artist, search for and download an image. Use online collections such as Wikipedia, Google, DuckDuckGo, LastFM. Perhaps use existing open source code to achieve this.
When user selects artist view, or when a specific artist is selected, display image for each artist.
From the colors of the album cover the background color of the title listing (which is shown when you click on an album) is calculated.
For some albums the calculated color is rather annoying. Maybe it makes sense to have a decent background color that is the same for all albums (e.g. light grey).
Another thing is that the background color of albums featuring a cover image is transparent (see image above). Unfortunately for the albums without a cover the background color is not transparent. Is there a chance to fix this?
I copied a .m3u play list(holding the URl of an internet radio station) into the folder where .mp3 files are located.
Selecting Wiedergabelisten from the drop down menu I only could search for Album, but nit for .m3u play list.
regards, hitam4450
So I'm using PostgreSQL. The issue for me was the code doesn't gracefully handle duplicate keys and the fault it generates. In other words, if you have the same song in two different files on your cloud, this complete breaks this application.
My workaround:
- make sure all files are unique
- edit postgres database directly for all audioplayer fields (DELETE FROM
;)
3) rescan
first of all, thank you very much for 1.1 - works great 👍
and my small request is simple... flac support. although I'm not really sure how much you're dependant on this external players.
one more thing. i noticed users have to refresh the list of albums, although it's all based on same, shared directories. any chance to have a an admin to refresh the list for everyone?
thanks!
uninstall smbclient
install php-smbclient
it gives better performance;
e.g. a "double start" after 2 seconds is gone then
special characters in the filename make playing impossible.
e.g. a "+" is decoded as "space" as an improper urldecoding is used.
=> switch to rawurldecode
I use Nextcloud 9.0.53 with Audioplayer 1.0.3. OS is Ubuntu with Firefox and Chromium.
Steps to reproduce
Expected behaviour
The 3rd track of the currently selected genre is played.
Actual behaviour
The 3rd track of the previously selected genre is played.
Hello,
it would be quite convenient to have the volume slider always visible to change the volume. Would this be possible to integrate?
Thank you
sleep timer to stop playing
the editor uses the available genres of module.tag.id3v1.php
if the own genre is not available in this external library, the dropdown is set to "- choose -" and overwrites the genre with this value
Where an album doesn't have a local picture, search for and download album cover art.
Where no album artwork is available, use photo of the artist (see #56 )
Images could be downloaded from DuckDuckGo, Google, Wikipedia, LastFM etc...
Perhaps use existing code from other open source projects to enable this.
...only playlist-songs...
I have at ussage of the audioplayer app the following errors in admin log:
Uncaught Error: Access to undeclared static property: OC\Files\Filesystem::$normalizedPathCache in /var/www/htdocs/lib/private/files/filesystem.php:798 Stack trace: #0 /var/www/htdocs/lib/private/files/view.php(2011): OC\Files\Filesystem::normalizePath('/MaT/files/Musi...') #1 /var/www/htdocs/lib/private/files/view.php(1129): OC\Files\View->unlockFile('/Music - World/...', 1) #2 [internal function]: OC\Files\View->OC\Files\{closure}() #3 /var/www/htdocs/3rdparty/icewind/streams/src/CallbackWrapper.php(109): call_user_func(Object(Closure)) #4 [internal function]: Icewind\Streams\CallbackWrapper->stream_close() #5 {main} thrown at /var/www/htdocs/lib/private/files/filesystem.php#798
My config: Debian 8, NC 9.0.53, PHP 7, Apache 2.4
Thx for feedback & resolve :-)
It would be nice if the player would search for a cover/folder.jpg/png in the album folder, and use this as the cover.
error log :
Exception: {"Exception":"Doctrine\\DBAL\\Exception\\InvalidFieldNameException","Message":"An exception occurred while executing 'SELECT id FROM oc_audioplayer_tracks WHERE
user_id= ? AND
title= ? AND
number= ? AND
artist_id= ? AND
album_id= ? AND
length= ? AND
bitrate= ? AND
mimetype= ? AND
genre_id= ? AND
year= ?' with params [\"sbr\", \"\\u4eca\\u5e74\\u590f\\u5929.mp3\", 0, 1828, 4124, \"3:37\", 128000, \"audio\\\/mpeg\", 447, 0]:\n\nSQLSTATE[42S22]: Column not found: 1054 Unknown column 'genre_id' in 'where clause'","Code":0,"Trace":"#0 \/var\/www\/html\/owncloud\/3rdparty\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/DBALException.php(116): Doctrine\\DBAL\\Driver\\AbstractMySQLDriver->convertException('An exception oc...', Object(Doctrine\\DBAL\\Driver\\PDOException))\n#1 \/var\/www\/html\/owncloud\/3rdparty\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/Statement.php(174): Doctrine\\DBAL\\DBALException::driverExceptionDuringQuery(Object(Doctrine\\DBAL\\Driver\\PDOMySql\\Driver), Object(Doctrine\\DBAL\\Driver\\PDOException), 'SELECT id FROM ...', Array)\n#2 \/var\/www\/html\/owncloud\/lib\/private\/db\/statementwrapper.php(73): Doctrine\\DBAL\\Statement->execute(Array)\n#3 \/var\/www\/html\/owncloud\/apps\/audioplayer\/controller\/scannercontroller.php(862): OC_DB_StatementWrapper->execute(Array)\n#4 \/var\/www\/html\/owncloud\/apps\/audioplayer\/controller\/scannercontroller.php(685): OCA\\audioplayer\\Controller\\ScannerController->writeTrackToDB(Array)\n#5 [internal function]: OCA\\audioplayer\\Controller\\ScannerController->scanForAudios()\n#6 \/var\/www\/html\/owncloud\/lib\/private\/appframework\/http\/dispatcher.php(159): call_user_func_array(Array, Array)\n#7 \/var\/www\/html\/owncloud\/lib\/private\/appframework\/http\/dispatcher.php(89): OC\\AppFramework\\Http\\Dispatcher->executeController(Object(OCA\\audioplayer\\Controller\\ScannerController), 'scanForAudios')\n#8 \/var\/www\/html\/owncloud\/lib\/private\/appframework\/app.php(110): OC\\AppFramework\\Http\\Dispatcher->dispatch(Object(OCA\\audioplayer\\Controller\\ScannerController), 'scanForAudios')\n#9 \/var\/www\/html\/owncloud\/lib\/private\/appframework\/routing\/routeactionhandler.php(45): OC\\AppFramework\\App::main('ScannerControll...', 'scanForAudios', Object(OC\\AppFramework\\DependencyInjection\\DIContainer), Array)\n#10 [internal function]: OC\\AppFramework\\routing\\RouteActionHandler->__invoke(Array)\n#11 \/var\/www\/html\/owncloud\/lib\/private\/route\/router.php(276): call_user_func(Object(OC\\AppFramework\\routing\\RouteActionHandler), Array)\n#12 \/var\/www\/html\/owncloud\/lib\/base.php(967): OC\\Route\\Router->match('\/apps\/audioplay...')\n#13 \/var\/www\/html\/owncloud\/index.php(39): OC::handleRequest()\n#14 {main}","File":"\/var\/www\/html\/owncloud\/3rdparty\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/Driver\/AbstractMySQLDriver.php","Line":71}
Then I downgrade to 1.0.3, reset music libary, upgrade to 1.1.0 again, scan music. Still get those error messages. Can play music on file browser.
nextcloud 9.0.53
php 7.0.8
mariaDB 10.1.16
with dozens of albums scanned it takes time to load Audio Player 1st screen and render all covers. especially on RPi ;) it'd be great to have some kind of a welcome / home screen with less data presented. ideas:
Every non ascii character get displayed as an "?".
Most of my filenames are only displayed as "???????????".
Feature request: Adding and saving several online streams. For example:
Thanks! :-)
PS: Don't know how to mark an issue as a Feature Request :-(
when a scanned audio file is deleted outside of the player, it will not start up unless the library is cleared and rescanned
in Owncloud 9.0.2 & NextCloud 9.0.52, some mimetypes are missing.
add the following lines to :
resources/config/mimetypemapping.dist.json
"m4a": ["audio/mp4"], "m4b": ["audio/m4b"],
Looks like the app is only searching in nextcloud itself, not on external storage. My music collection is on an external storage (a local one) which is not being scanned.
Sunday Popcorn (Radio edit) - BANANAFOX 15% (74/465)
log
Exception: {"Exception":"Doctrine\DBAL\Exception\DriverException","Message":"An exception occurred while executing 'INSERT INTO oc_audioplayer_genre
(user_id
,name
) SELECT ?,? FROM oc_audioplayer_genre
WHERE user_id
= ? AND name
= ? HAVING COUNT(_) = 0' with params ["SparkY", "\xff\xfe", "SparkY", "\xff\xfe"]:\n\nSQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xFF\xFE' for column 'name' at row 18","Code":0,"Trace":"#0 /media/Store/www/Cloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php(116): Doctrine\DBAL\Driver\AbstractMySQLDriver->convertException('An exception oc...', Object(Doctrine\DBAL\Driver\PDOException))\n#1 /media/Store/www/Cloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(996): Doctrine\DBAL\DBALException::driverExceptionDuringQuery(Object(Doctrine\DBAL\Driver\PDOMySql\Driver), Object(Doctrine\DBAL\Driver\PDOException), 'INSERT INTO oc...', Array)\n#2 \/media\/Store\/www\/Cloud\/lib\/private\/DB\/Connection.php(209): Doctrine\\DBAL\\Connection->executeUpdate('INSERT INTO
oc...', Array, Array)\n#3 /media/Store/www/Cloud/lib/private/DB/Adapter.php(113): OC\DB\Connection->executeUpdate('INSERT INTO `oc...', Array)\n#4 /media/Store/www/Cloud/lib/private/DB/Connection.php(247): OC\DB\Adapter->insertIfNotExist('_PREFIX_audiopl...', Array, Array)\n#5 /media/Store/www/Cloud/lib/private/AppFramework/Db/Db.php(149): OC\DB\Connection->insertIfNotExist('_PREFIX_audiopl...', Array, NULL)\n#6 /media/Store/www/Cloud/apps/audioplayer/controller/scannercontroller.php(780): OC\AppFramework\Db\Db->insertIfNotExist('_PREFIX*audiopl...', Array)\n#7 /media/Store/www/Cloud/apps/audioplayer/controller/scannercontroller.php(598): OCA\audioplayer\Controller\ScannerController->writeGenreToDB('\xFF\xFE')\n#8 [internal function]: OCA\audioplayer\Controller\ScannerController->scanForAudios()\n#9 /media/Store/www/Cloud/lib/private/AppFramework/Http/Dispatcher.php(159): call_user_func_array(Array, Array)\n#10 /media/Store/www/Cloud/lib/private/AppFramework/Http/Dispatcher.php(89): OC\AppFramework\Http\Dispatcher->executeController(Object(OCA\audioplayer\Controller\ScannerController), 'scanForAudios')\n#11 /media/Store/www/Cloud/lib/private/AppFramework/App.php(110): OC\AppFramework\Http\Dispatcher->dispatch(Object(OCA\audioplayer\Controller\ScannerController), 'scanForAudios')\n#12 /media/Store/www/Cloud/lib/private/AppFramework/Routing/RouteActionHandler.php(46): OC\AppFramework\App::main('ScannerControll...', 'scanForAudios', Object(OC\AppFramework\DependencyInjection\DIContainer), Array)\n#13 [internal function]: OC\AppFramework\Routing\RouteActionHandler->__invoke(Array)\n#14 /media/Store/www/Cloud/lib/private/Route/Router.php(280): call_user_func(Object(OC\AppFramework\Routing\RouteActionHandler), Array)\n#15 /media/Store/www/Cloud/lib/base.php(891): OC\Route\Router->match('/apps/audioplay...')\n#16 /media/Store/www/Cloud/index.php(39): OC::handleRequest()\n#17 {main}","File":"/media/Store/www/Cloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php","Line":115}
Hi there!
Thank you for the great app! But I'm facing with a very weird issue. My music library consist of >3500 mp3 files. And the app is hanging on 53% of scanning (1963 files)
Linux 4.1.31-1
apache 2.4.23-1
mariadb 10.1.16-2
php 7.0.10-1
Nextcloud "version":"9.1.0.16","versionstring":"10.0"
Nextcloud updated from ownCloud 9
Audio Player installed from the appstore
no external storage
no encryption
Linux manjaro 4.1.31-1-MANJARO
Firefox 48.0.2-1
ownCloud/Nextcloud log (/data/[owncloud|nextcloud].log
)
{"reqId":"PHovhdeA5u67OXBY6do1","remoteAddr":"MY_IP_HERE","app":"admin_audit","message":"Login attempt: \"Speranskiy\"","level":1,"time":"2016-09-12T08:50:34+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"--"}
{"reqId":"PHovhdeA5u67OXBY6do1","remoteAddr":"MY_IP_HERE","app":"admin_audit","message":"Login successful: \"Speranskiy\"","level":1,"time":"2016-09-12T08:50:34+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
{"reqId":"PHovhdeA5u67OXBY6do1","remoteAddr":"MY_IP_HERE","app":"no app in context","message":"CSRF check failed","level":0,"time":"2016-09-12T08:50:34+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
{"reqId":"Ct9FCxtR1tu6B\/fqeHEx","remoteAddr":"MY_IP_HERE","app":"no app in context","message":"CSRF check failed","level":0,"time":"2016-09-12T08:50:34+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
{"reqId":"HfyPqfOMRnvgzafB0Ar2","remoteAddr":"MY_IP_HERE","app":"no app in context","message":"CSRF check failed","level":0,"time":"2016-09-12T08:50:46+00:00","method":"GET","url":"\/index.php\/apps\/audioplayer\/getimporttpl","user":"Speranskiy"}
{"reqId":"6EjsQy8lRItz6G+d+7lb","remoteAddr":"MY_IP_HERE","app":"audioplayer","message":"Error with getID3. Does not seem to be a valid audio file: \/Music\/MUSE\/2009 - The Resistance (Limited Edition Digipak) UK - (320 kbps)\/08. I Belong To You Mon C?ur S'ouvre ? Ta Voix.mp3","level":0,"time":"2016-09-12T08:51:52+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
{"reqId":"6EjsQy8lRItz6G+d+7lb","remoteAddr":"MY_IP_HERE","app":"PHP","message":"iconv(): Detected an illegal character in input string at \/usr\/share\/webapps\/nextcloud\/apps\/audioplayer\/controller\/scannercontroller.php#556","level":0,"time":"2016-09-12T08:52:48+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
{"reqId":"6EjsQy8lRItz6G+d+7lb","remoteAddr":"MY_IP_HERE","app":"PHP","message":"iconv(): Detected an illegal character in input string at \/usr\/share\/webapps\/nextcloud\/apps\/audioplayer\/controller\/scannercontroller.php#556","level":0,"time":"2016-09-12T08:52:48+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
{"reqId":"6EjsQy8lRItz6G+d+7lb","remoteAddr":"MY_IP_HERE","app":"PHP","message":"iconv(): Detected an illegal character in input string at \/usr\/share\/webapps\/nextcloud\/apps\/audioplayer\/controller\/scannercontroller.php#556","level":0,"time":"2016-09-12T08:52:48+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
{"reqId":"6EjsQy8lRItz6G+d+7lb","remoteAddr":"MY_IP_HERE","app":"audioplayer","message":"Error with getID3. Does not seem to be a valid audio file: \/Music\/\u0421\u043f\u043b\u0438\u043d (\u0421\u0430\u0448\u0430 \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432)\/1998 - \u0413\u0440\u0430\u043d\u0430\u0442\u043e\u0432\u044b\u0439 \u0410\u043b\u044c\u0431\u043e\u043c (Navigator Records, NR 0708 CDp, 2008) [flac]\/.unwanted\/03. \u041e\u0440\u0431\u0438\u0442 \u0431\u0435\u0437 \u0441\u0430\u0445\u0430\u0440\u0430.mp3","level":0,"time":"2016-09-12T08:52:48+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
{"reqId":"6EjsQy8lRItz6G+d+7lb","remoteAddr":"MY_IP_HERE","app":"audioplayer","message":"Error with getID3. Does not seem to be a valid audio file: \/Music\/Robbie Williams - Discography\/Singles\/Robbie Williams - Advertising Space\/.unwanted\/(03) [Robbie Williams] Ouverture For Berlin.mp3","level":0,"time":"2016-09-12T08:53:09+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
{"reqId":"6EjsQy8lRItz6G+d+7lb","remoteAddr":"MY_IP_HERE","app":"PHP","message":"iconv(): Detected an illegal character in input string at \/usr\/share\/webapps\/nextcloud\/apps\/audioplayer\/controller\/scannercontroller.php#556","level":0,"time":"2016-09-12T08:54:21+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
{"reqId":"6EjsQy8lRItz6G+d+7lb","remoteAddr":"MY_IP_HERE","app":"PHP","message":"iconv(): Detected an illegal character in input string at \/usr\/share\/webapps\/nextcloud\/apps\/audioplayer\/controller\/scannercontroller.php#556","level":0,"time":"2016-09-12T08:54:21+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
{"reqId":"6EjsQy8lRItz6G+d+7lb","remoteAddr":"MY_IP_HERE","app":"PHP","message":"imagecreatefromstring(): gd-png: fatal libpng error: bad adaptive filter value\n at \/usr\/share\/webapps\/nextcloud\/lib\/private\/legacy\/image.php#598","level":3,"time":"2016-09-12T08:54:21+00:00","method":"POST","url":"\/index.php\/apps\/audioplayer\/scanforaudiofiles","user":"Speranskiy"}
Hi there,
Can you make this work for owncloud 9.1?
Thanks.
The automatic derivation of background colors for albums & titlelists did not really work.
either the colors were to bright or the contrast between background & fonts was not good.
It is reworked to a unique experience
Albums rows not rearranged when navigation-bar is opened
during playback of a song, the coverart is not changed once a different one is playing
Hi,
i have a large collection of m3u play lists handling all my Internet radio stations and it would be very advantageous if audioplayer not only could play my m3u Internet radio play lists but others play m3u lists of other users as well.
regards, hitam4450
I am so pleased to see this being maintained! So much better then the other MP3 player 😁
I have downloaded and got it installed on my owncloud service but when I click scan for new files it comes back empty. What have I got wrong?
Hi,
The left panel in Version 1.01 was selectable show or hide.
Unfortunately, this feature was deleted in Version 1.02 and the left panel covers now a fixed portion of the display, which makes it not nice, during "Music play".
Please revert to the "old and former style" of making it user selectable and not fixed proportion!
I am sure, many other user feel the same way....... of using your great audioplayer!
regards, hitam4450
in some occasions, an empty year string is causing errors
An exception occurred while executing 'UPDATE oc_audioplayer_albums
SET year
= ?, genre_id
= ? WHERE id
= ? AND user_id
= ?' with params [\"\", \"20\", \"60\", \"xyz\"]:\n\nSQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'year' at row 1\
=> default to "0"
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.