Code Monkey home page Code Monkey logo

pimusicbox's Introduction

This project is no longer maintained.

There will be no more releases and probably no more support from myself. The Pi 4 and Zero W 2 do not work with the last release and I don't know of any workarounds.

Potential alternative software (in no particular order):

Have a suggestion/recommendation? Open a PR.

Pi MusicBox

Pi MusicBox is the Swiss Army Knife of streaming music on the Raspberry Pi. With Pi MusicBox, you can create a cheap (Sonos-like) standalone streaming music player for Spotify and other online music services.

Maintainer Wanted

This project is outdated and requires more work than I am currently prepared to invest. If you are interested in becoming the maintainer then please get in touch.

Features

  • Headless audio player based on Mopidy. Just connect your speakers or headphones - no need for a monitor.
  • Quick and easy setup with no Linux knowledge required.
  • Stream music from Spotify, SoundCloud, Google Music and YouTube.
  • Listen to podcasts (with iTunes and Podder directories) as well as online radio (TuneIn, Dirble and Soma FM).
  • Play MP3/OGG/FLAC/AAC music from your SD card, USB drives and network shares.
  • Remote controllable with a choice of browser-interfaces or with an MPD-client (e.g. MPDroid for Android).
  • AirTunes/AirPlay and DLNA streaming from your smartphone, tablet or computer.
  • Support for all kinds of USB, HifiBerry and IQ Audio soundcards.
  • Wi-Fi support (WPA, Raspbian supported Wi-Fi adapters only)
  • Last.fm scrobbling.
  • Spotify Connect support.

Please note that Pi MusicBox does NOT currently support the Raspberry Pi 4.

Installation

  1. Download the latest release.
  2. Write the image to your SD card. See here for details.
  3. Customise the /boot/config/settings.ini file.
  4. Boot your Raspberry Pi and wait for PiMusicbox to start.
  5. Finish configuring the system using the web settings.

Creating an image

If you want to build an image from source, note that the current v0.7 image is an incremental update of v0.6 and can be generated as follows:

# 1. Install prerequisite packages (probably not an exhaustive list, sorry....)
sudo apt-get install git coreutils e2fsprogs zerofree util-linux qemu-user-static latexmk python-sphinx

# 2. Download and unzip very latest project source files (use master.zip for current release)
wget https://github.com/pimusicbox/pimusicbox/archive/develop.zip
unzip develop.zip && mv pimusicbox-develop src

# 3. Download and unzip base v0.6 image
wget https://github.com/pimusicbox/pimusicbox/releases/download/v0.6.0/pimusicbox-0.6.0.zip
unzip pimusicbox-0.6.0.zip && mv musicbox0.6.img musicbox.img

# 4. Enlarge image so there is free space to work in
./src/makeimage.sh musicbox.img bigger

# 5. Run update script within base image (requires sudo).
./src/chroot.sh musicbox.img create_musicbox0.7.sh

# 6. Go have a cup of tea/coffee while you wait...

# 7. Shrink the image and other finishing touches
./src/makeimage.sh musicbox.img finalise

Project resources

License

Copyright 2013-2020 Wouter van Wijk and contributors.

Licensed under the Apache License, Version 2.0. See the file LICENSE for the full license text.

pimusicbox's People

Contributors

amitkot avatar chrisgill avatar hadess avatar jcass77 avatar jodal avatar jpswade avatar jsaalfeld avatar kingosticks avatar massycat avatar mastr avatar mathinus avatar nerdoc avatar nilicule avatar prinzhorn avatar woutervanwijk 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pimusicbox's Issues

Shairplay stutters

While playing music on Spotify for iPad and with AirPlay activated playing to the Pi, the music stutters quite a bit. The Pi is connected to a repeater while the iPad is right beside the antenna.

0.4alpha - ssh iptables rule added and then removed

When ssh is enabled in settings.ini the ssh daemon is started in rc.local, then proper iptables rule is made. Unfortunately after that /etc/network/if-up.d/iptables is run (at least in my setup with wifi and no ethernet). This file simple restores rules from /etc/firewall/musicbox_iptables and there is no ssh rule.

No sound after switching from Mopidy output to Shairport/Airplay output

I set up MusicBox on my RPi as described here. However, I don't get any sound after switching from output via Mopidy to output via Shairport/Airplay.

After a fresh reboot, both seem to work fine. However, once I played a Spotify stream through the web interface (and then stopped the stream), it is not possible to output sound via Shairport/AirPlay. The reverse (output through AirPlay/Shairport first after reboot, then switching to output through Mopidy) seems to work fine, at least as long as I remember to terminate the AirPlay connection by selecting internal speakers as the output device on my MBP first.

In summary, these workflows work fine for me:

  1. Shairport/AirPlay output
    • Boot MusicBox
    • Select "MusicBox" as output device through sound menu in OS X menubar
    • Play any audio on Mac
  2. Mopidy output
    • Boot MusicBox
    • Open Mopidy interface and play Spotify stream
  3. Switching output from AirPlay to Mopidy
    • Boot MusicBox
    • Select "MusicBox" as output device through sound menu in OS X menubar
    • Play any audio on Mac
    • Select another output device through sound menu in OS X menubar
    • Open Mopidy interface and play Spotify stream

This one doesn't:

  1. Switching output from Mopidy to AirPlay
    • Boot MusicBox
    • Open Mopidy interface and play Spotify stream
    • Click "Pause" button in Mopidy webinterface
    • Select "MusicBox" as output device through sound menu in OS X menubar
    • Play any audio on Mac => NO SOUND

I assume that the issue probably lays somewhere with Mopidy which doesn't seem to properly terminate the exclusive use of the audio mixer after the "Pause" button was pressed.

Enable local backend

Enable the local backend to play local music files and enable Samba to put the files on the card, or on an external usb-drive

settings.ini

settings.ini file uses token GMUSIC_USER when rc.local is parsing for GMUSIC_USERNAME, result is gmusic is always disabled on boot.

in version .4 alpha

Set name of device in ini file

For users with multiple devices in the same network, it would be nice to have an easy way of changing the name of musicbox to something else.

CEC support in musicbox

See mopidy/mopidy#187 for technical details. For the high level view of this the idea is to use the HDMI control in the raspi to turn on receivers, change input, control volume etc. This basically means pressing play in the webinterface should just work even when the reciever etc is off and/or setup for the wrong inpout :-)

Queue issues

Hi I am having some issues with the spotify queue and shuffle.

If shuffle is activated and I choose "play track next" the song does not get played next.
And if i choose "play track" in the queue the song that I choose does not play but another

Small CSS Tweak for Mobile

Change #controldiv CSS width to 200px to prevent #slidercontainer from being pushed down on mobile screens @ 320px.

GMusic album browser

Google music is more based around artists and albums than playlists. Would it be possible to add an Artist / Album browser?

Using pulsemixer in mopidy

Right now, the volume is based on the amixer scale, not the alsamixer scale. The effective range (of the audio setting for my speakers) of the former is about 70% to 100%.

Pulsemixer uses the alsamixer scale, which feels more "natural".

Combine mopidy config and musibox config?

Since mopidy has now long since switched to an ini based config system musicbox could easily use the same config as mopidy. This would mainly just require that any musicbox specific things live in a [musicbox] config section as mopidy will happily ignore any sections it doesn't know about.

Turn PiMusicBox into a debian package

http://debathena.mit.edu/config-packages/ looks like a perfect fit for making it possible to create a pimusicbox debian package. If this gets created it would really mean that the image would be reduced to a plain rasbpian install with the musicbox package + deps preinstalled (we could maybe even have a fix-audio debian package in this same way).

Neat thing if this becomes reality is that a non musicbox image could be upgraded to one with a simple package install.

debconf for asking for config values might also be relevant for this idea.

/opt/resizefs.sh

file references 'parted' but this executable is not on the filesystem.

this is for version .4 alpha

High CPU usage

I have an untouched musicbox0.3 which is unable to play music (using analog) due to 100% CPU usage. Pulseaudio is using it all. I noticed a mention of it in #20 but I'm seeing it when not playing any music. Also I'm trying to play spotify music, not airplay.

local music?

Hi!

i don't have a spotify account, but i'm trying to get this running as a internetradio/localmusic station... the thing is:
i dont get this thing loading anything!

what i'v done?:

  1. i disabled the spotifybackend (seen in the other threads)
  2. path matches my path for local music

--> mopidy startes up! - but the little cycle on the webgui dont stops turing, just telling me, it still waits to get infos from the box....

so my questions:

is there anything i'll have to enable to add this specific function?
which kind of audiofiles can it read (if it can not mp3, it would explain a lot ;) )?

can anybody give me some instructions to get it running with my local music and some hint how some internetradiostations can be added?

no sound out from Rpi analogue port ?

hi i have created my SD card correctly and all went smoothly thx

When i started the Rpi it all started fine.
i modified the config file with spotify credentials
I went to http://musicbox.local and it started retrieving data
this went fine.
however when i attempt to play a song it plays ok but i get no sound from the Rpi ?
is there some othetr volume or sound setting i need to do ?
I am hoping the analogue audio out is working here ?

matt

0.4a trouble connecting with AirPlay

Version 0.4 alpha:
My Iphone can't find the Pi, Airfoil on windows can find it, but can't connect. When trying to connect with Airfoil I get a error asking me to check the firewall settings on the device it's trying to connect to. (I've only tried with a wifi dongle, not with ethernet cable).

I'm loving MusicBox btw :) keep up the good work!

Can't boot

Hi,
When I try to boot the green led blinks for the frst 1 second and then stays on only the red forever. Why?

Don't run services as root

In the case of mopidy it could be run behind a proxy such as nginx so that mopidy is only listening on localhost:6680, while nginx makes it available on port 80. This would also make it possible to add ssl and/or auth in nginx.

The Mopidy musicserver is not protected, and the Musicbox services are run as root. Maybe this is better in the future, but not now. Sorry.

If this applies to any other services they should be updated to run as a given user per service or running as nobody.

no wifi?

Hi all,

first, thanks for a great piece of software. I have an issue with my wifi: the boot endlessly cycles through "waiting for network" or something like that. Everything is OK with a cable.

My wifi dongle works out of the box with raspbian so I thought I would be OK.

Apart from the SSID and WEP key in the settings.ini, is there anything else I can tweak?

BTW, I am a huge linux noob ;-)

Despotify

Hi,

Is there any plan to you include Despotify in the next image ? Despotify is useful when you want to control mopidy via a client like mpc:

http://www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=9484

Please correct me if I am wrong bu without Despotify this is not possible to load a playlist via the spotify url:

mpc load spt://[SPOTIFY URI]

Thanks

Pi-side interface

Hi,

Since i'm using my Pi as xbmc as well I have it set up through HDMI and my sound system hooked up to my tv.
So whenever I use my pi as musicbox I have a static terminal screen with the occasional info messages.
It would be very nice if MusicBox could show a simple interface with info about the current track playing. This would also be better for my tv :-)
However, this would be a nice feature to add!

VT1728A (VIA) USB support

First of all, great job on Pi-MusicBox so far! Awesome concept!

But is there any guidance on which USB audio controller chips are supported? I have just tried to connect my otherwise great Audinst HUD-mx2 USB sound card with VT1728A (VIA) usb audio controller, and it doesn't seem to work.

I can read the following error message:


Setting up ALSA...warning 'alsactl1 restore' failed with the error message 'No state is present for card HUDmx2
Found hardware: "USB-Audio" "USB Mixer" "USB040d:340f" "" ""

[ ok ate is present for card HUDmx2'...done

Any tweaks to get this working?

Note: I'm both rbp and linux rookie

BR Søren from DK

HDMI audio output?

Great job on this... i followed the instructions and i got it to work, but i am just getting audio through the standard 3.5mm output, i wonder is the hdmi audio output is working? or are you adding it on the future?

Stop shipping with insecure credentials

This is a bit of a tricky one to get right given the potentially inexperienced users and the nature of the image. One option might be to randomly generate a password on the first boot, set it and print it during each subsequent boot. Then once the password is changed we stop printing it.

Would make it a bit harder the first time someone wants to login but much better in the long run. Of course this idea is only one of many possible ways of solving this.

Volume change slowly

Hi Guys.

When i'm trying to change the volume level on my iPad or mac it changes in small steps and very slowly.

Is it possible to change the volume immediately?

Consider making image creation more reproducible

http://www.kmp.or.at/~klaus/raspberry/build_rpi_sd_card.sh shows how one can build an image for the raspi using debbootstrap, which is part of the debian installer system. Using this we could make it much easier for people to create the image from scratch in a reproducible way.

If this where combined with pimusicbox debian packages that contain most of the customization we might even be able to get it to a point where someone could just do an apt-get install pimusicbox on a rasbian system with apt.mopdy.com and get an equivalent setup.

/etc/sysctl.conf

there is a invalid character on line 1,1 of this file.

this is for .4 alpha

/etc/rc.local - mount command is invalid

mount command incomplete..

reads "mount -t cifs -o ro,rsize=2048,wsize=4096,cache=strict,user=$INI__MusicBox__NETWORK_MOUNT_USER,password=$INI__MusicBox__NETWORK_MOUNT_PASSWORD $INI__MusicBox__NETWORK_MOUNT_A"

should read

" mount -t cifs -o ro,rsize=2048,wsize=4096,cache=strict,user=$INI__MusicBox__NETWORK_MOUNT_USER,password=$INI__MusicBox__NETWORK_MOUNT_PASSWORD $INI__MusicBox__NETWORK_MOUNT_ADDRESS /music/network/'

in version .4 alpha

Delay Spotify login till after network is up

I ran into an issue today using a wireless adapter. The Spotify login was failing because the network wasn't up yet. Switching to a lan cable fixed the issue, but i'd like to go back to wifi so that I can start to use the device as intended.

Add option for use without Spotify

Hi! I just downoloaded your software today, and it looks really promising, but sadly i cant get it to work.

I get to the point where i start my pi up, and it says "my ip is 192.168.1.10". I then go on my computer, start Chrome and type http://192.168.1.10. Then it just says cant connect.

I have also tried typing "http://musicbox.local", but same result.

Mi pi is connected via cable through a switch, i have tried connecting via both wifi and cable on my windows pc.

Any help you can offer will be greatly appreciated!

Regards
Helge

Create image customizing tool

I imagine this as either a script you run, or even as an online service that basically uses a base image, or the image creation script idea mentioned in #6, where the idea is that you at the very least could inject an authorized_keys file for root or have a key pair or password generated and injected for less technical users. Other options for pre-configuring with more settings is possible, but should all be optional as I would want it be possible to choose not to trust such a service with credentials (thus the authorized keys variant).

On a more technical level, we might be able to pull this of by having a plain base image that we create with no spare space what so ever, and then having a second partition in the image that is writable and then mount using unionfs. This would give us an overlay over the base that is self contained. So for the default image we would ship the base partition + empty overlay, while users of this tool would basically be pre populating it with whatever they need. Other neat thing about this approach, is it allows for a "factory reset" by nuking everything in the overlay getting users back to a known base state.

How to use offline?

I whant to use Pi-MusicBox to listen on Spotify in the car, so there not takes to match battery from my mobile.

But i find a problem after buyed a Raspberry Pi and testing Pi-MusicBox that its not support offline playlists...

Can this be fixed?

Volume Setting moves randomly

Hey...
thanks for this great image..

One issue though: Rarely the volume slider doesn't smoothly jumps to a new volume level, if this volume level is set by sliding the knob. The sliders follows slowly behind, sometimes even going up in between.
If I directly click on a specific position, it immediately jumps to that level..

One more things: In the interest of ear safety.. Maybe you could set the standard value for the volume slider to 5 or 10.. In combination with the Logilink UA0078, which seem not unpopular among Raspberry Pi users, it almost blew out my ear drums.. Took a while till I found the volume setting knob..

Kind regards
Niels Göran

XMOS+ES9023 DAC no audio

The XMOS+ES9023 DAC (http://www.ebay.com/itm/XMOS-ES9023-Asynchronous-DAC-Decoder-USB-to-Optical-Coaxial-384K-32Bit-Weiliang-/141021544210?pt=US_Home_Audio_Amplifiers_Preamps&hash=item20d589ff12) does not appear to work for some reason

I can get audio to work via HDMI (if i disconnect DAC and reboot)

The DAC provides coaxial, SPIDF and headphone jack. None work in musicbox but the I can see that both L and R channels are being sent to the receiver (PCM) over both SPIDF and Coxial.

I have tried to isolate the problem by using raspyfi and audio works on all 3 outputs when using raspfi

When booting with auto detection it finds the USB card (i have not set in .ini)

It is detected
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 20b1:2013 XMOS Ltd

It is defined at index 1
root@MusicBox:~# more /proc/asound/cards
0 [ALSA ]: BRCM bcm2835 ALSbcm2835 ALSA - bcm2835 ALSA
bcm2835 ALSA
1 [X20 ]: USB-Audio - XMOS USB Audio 2.0
XMOS XMOS USB Audio 2.0 at usb-bcm2708_usb-1.3, high speed

root@MusicBox:~# aplay -L
null
Discard all samples (playback) or generate zero samples (capture)
sysdefault:CARD=ALSA
bcm2835 ALSA, bcm2835 ALSA
Default Audio Device
sysdefault:CARD=X20
XMOS USB Audio 2.0, USB Audio
Default Audio Device
front:CARD=X20,DEV=0
XMOS USB Audio 2.0, USB Audio
Front speakers
surround40:CARD=X20,DEV=0
XMOS USB Audio 2.0, USB Audio
4.0 Surround output to Front and Rear speakers
surround41:CARD=X20,DEV=0
XMOS USB Audio 2.0, USB Audio
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=X20,DEV=0
XMOS USB Audio 2.0, USB Audio
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=X20,DEV=0
XMOS USB Audio 2.0, USB Audio
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=X20,DEV=0
XMOS USB Audio 2.0, USB Audio
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=X20,DEV=0
XMOS USB Audio 2.0, USB Audio
IEC958 (S/PDIF) Digital Audio Output

root@MusicBox:~# more /etc/asound.conf
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}

While playing audio i can see
root@MusicBox:~# cat /proc/asound/card1/stream0
XMOS XMOS USB Audio 2.0 at usb-bcm2708_usb-1.3, high speed : USB Audio

Playback:
Status: Running
Interface = 1
Altset = 1
Packet Size = 1024
Momentary freq = 44104 Hz (0x5.8358)
Feedback Format = 8.16
Packet Size = 0
Momentary freq = 44100 Hz (0x5.8333)
Interface 1
Altset 1
Format: S32_LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
Data packet interval: 125 us

root@MusicBox:~# cat /proc/asound/card1/usbmixer
USB Mixer: usb_id=0x20b12013, ctrlif=0, ctlerr=0
Card: XMOS XMOS USB Audio 2.0 at usb-bcm2708_usb-1.3, high speed
Unit: 10
Control: name="XMOS Clock Selector Playback Volume", index=1
Info: id=10, control=2, cmask=0x0, channels=1, type="S16"
Volume: min=-32512, max=0, dBmin=-12700, dBmax=0
Unit: 10
Control: name="XMOS Clock Selector Playback Volume", index=0
Info: id=10, control=2, cmask=0x3, channels=2, type="S16"
Volume: min=-32512, max=0, dBmin=-12700, dBmax=0
Unit: 10
Control: name="XMOS Clock Selector Playback Switch", index=1
Info: id=10, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
Volume: min=0, max=1, dBmin=0, dBmax=0
Unit: 10
Control: name="XMOS Clock Selector Playback Switch", index=0
Info: id=10, control=1, cmask=0x3, channels=2, type="INV_BOOLEAN"
Volume: min=0, max=1, dBmin=0, dBmax=0

I have checked level in alsamixer

  • I have tried to play sample wav files using aplay and i get no audio when in S32_LE
    and i get aplay: set_params:1081: Sample format non available if in wrong format)
  • I have tried disabling bcm2835 (/etc/modules #snd-bcm2835)
  • i have tried setting the DAC to soundcard index #0 (modifying rc.local and disabling most of the auto detection)
  • i have tried updating and or adding various packages that relate to usb audio class 2.0

I am at a bit of a loss as to what to try next

Mopidy lags while controlling from MPD

Using mpc controlling volume, I noticed a 2-3 second lag between the return of output from mpd on the Pi and the volume actually increasing. This also happens when changing songs and pause/playing.

EDIT: this also happens when changing songs and volume in the webinterface, with the volume slider stuttering around and moving slowly when dragged as seen in #1.

0.4 beta - SSH password change on reboot

On reboot, custom ssh password is changed. And authentication become impossible through ssh.
And as settings.ini is modified, I have to edit this file every time I reboot (not often but when I am testing things...)

little bug in 0.4 alpha in /etc/rc.local with Spotify bitrate

/etc/rc.local

I think line 101 must be changed to SPOTIFY_BITRATE=320
currently it looks like INI__MusicBox__SPOTIFY_BITRATE=320 (makes no sense to me)

same thing to line 105

i think you understand what i mean if you look at the skript.

ps: thank you for that great project and sorry for my bad english :-)

SSH enabled by default

Hi,

Would it be possible to enable ssh by default or at least make it easy to enable thru the web interface/samba? I'm running my Raspberry Pi connected to the A/V amplifier and I don't have any usb keyboard at home so this would make it much easier to setup.

Thanks,
David.

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.