pothosware / soapyfcdpp Goto Github PK
View Code? Open in Web Editor NEWSoapy SDR plugin for Funcube Dongle Pro+
Home Page: https://github.com/pothosware/SoapyFCDPP/wiki
License: Boost Software License 1.0
Soapy SDR plugin for Funcube Dongle Pro+
Home Page: https://github.com/pothosware/SoapyFCDPP/wiki
License: Boost Software License 1.0
Hello,
I am trying to get my FunCube Dongle Pro+ working under SDR++ using your driver. I can get it working my FCD working under CubicSDR perfectly with your driver, however, when I first tried it the audio was "choppy" exactly the same way it is under SDR++. Again, using your driver. When check the driver settings under CubicSDR there is an additional "Run-time Setting". I don't know what this is for because there is no label but the lower the number the better. When I enter 192 into this field (the lowest I can enter, BTW) the audio comes out perfectly.
I am trying to find out where to enter in such a run-time parameter using SDR++. I have tried asking the author of SDR++ this question and you can see his response here:
AlexandreRouma/SDRPlusPlus#508
Is there another way to enter this parameter to get SDR++ working properly?
Thank you for your time...
Fails to connect
2024-07-29 23:49:12,445 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - Started sdr source: soapy_connector -s 192000 -f 28074000 -p 60261 -c 59449 -d driver=fcdpp
2024-07-29 23:49:12,456 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: setting up control socket...
2024-07-29 23:49:12,456 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: control socket started on 59449
2024-07-29 23:49:12,457 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: socket setup complete, waiting for connections
2024-07-29 23:49:12,545 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] makeFCDPP
2024-07-29 23:49:12,545 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: hid_open_path failed to open: 1-1.4:1.2
2024-07-29 23:49:12,546 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: Connector::open() failed
2024-07-29 23:49:30,765 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - Started sdr source: soapy_connector -s 192000 -f 28074000 -p 60261 -c 59449 -d driver=fcdpp
2024-07-29 23:49:30,777 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: setting up control socket...
2024-07-29 23:49:30,777 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: control socket started on 59449
2024-07-29 23:49:30,777 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: socket setup complete, waiting for connections
2024-07-29 23:49:30,854 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] makeFCDPP
2024-07-29 23:49:30,855 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: hid_open_path failed to open: 1-1.4:1.2
2024-07-29 23:49:30,855 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: Connector::open() failed
2024-07-29 23:49:30,867 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - ERROR - Exception during postStart()
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/owrx/source/init.py", line 427, in start
self.postStart()
File "/usr/lib/python3/dist-packages/owrx/source/connector.py", line 62, in postStart
self.controlSocket.connect(("localhost", self.controlPort))
ConnectionRefusedError: [Errno 111] Connection refused
@ast Whats the license for SoapyFCDPP? Can you check in some kind of license file for it. Any standard open source license is probably fine. I need it so I can upload/package this in the PPA, probably needed for debian and others too. Thx
Meson compile failed with this error:
3/5] Compiling C++ object 'soapyfcdpp@sha/SoapyFCDPP.cpp.o'.
FAILED: soapyfcdpp@sha/SoapyFCDPP.cpp.o
c++ -Isoapyfcdpp@sha -I. -I.. -I/usr/local/include -I/usr/include/alsa -I/usr/include/hidapi -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -std=c++11 -g -fPIC -ggdb -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard -funsafe-math-optimizations -MD -MQ 'soapyfcdpp@sha/SoapyFCDPP.cpp.o' -MF 'soapyfcdpp@sha/SoapyFCDPP.cpp.o.d' -o 'soapyfcdpp@sha/SoapyFCDPP.cpp.o' -c ../SoapyFCDPP.cpp
../SoapyFCDPP.cpp:159:6: error: no declaration matches ‘void SoapyFCDPP::convertCS16toCF32(void*, void*, size_t)’
void SoapyFCDPP::convertCS16toCF32(void dst, void src, size_t samples)
^~~~~~~~~~
../SoapyFCDPP.cpp:159:6: note: no functions named ‘void SoapyFCDPP::convertCS16toCF32(void, void, size_t)’
In file included from ../SoapyFCDPP.cpp:5:
../SoapyFCDPP.hpp:29:7: note: ‘class SoapyFCDPP’ defined here
class SoapyFCDPP : public SoapySDR::Device
^~~~~~~~~~
ninja: build stopped: subcommand failed.
Also tried with cmake, with error:
[ 20%] Building CXX object CMakeFiles/FCDPPSupport.dir/SoapyFCDPP/SoapyFCDPP.cpp.o
/usr/src/SoapyFCDPP/SoapyFCDPP/SoapyFCDPP.cpp:159:6: error: no declaration matches ‘void SoapyFCDPP::convertCS16toCF32(void*, void*, size_t)’
void SoapyFCDPP::convertCS16toCF32(void dst, void src, size_t samples)
^~~~~~~~~~
/usr/src/SoapyFCDPP/SoapyFCDPP/SoapyFCDPP.cpp:159:6: note: no functions named ‘void SoapyFCDPP::convertCS16toCF32(void, void, size_t)’
In file included from /usr/src/SoapyFCDPP/SoapyFCDPP/SoapyFCDPP.cpp:5:
/usr/src/SoapyFCDPP/SoapyFCDPP/SoapyFCDPP.hpp:29:7: note: ‘class SoapyFCDPP’ defined here
class SoapyFCDPP : public SoapySDR::Device
^~~~~~~~~~
/usr/src/SoapyFCDPP/SoapyFCDPP/SoapyFCDPP.cpp: In member function ‘virtual int SoapyFCDPP::readStream(SoapySDR::Stream*, void* const*, size_t, int&, long long int&, long int)’:
/usr/src/SoapyFCDPP/SoapyFCDPP/SoapyFCDPP.cpp:216:13: warning: this statement may fall through [-Wimplicit-fallthrough=]
if(n_err >= 0) {
^~
/usr/src/SoapyFCDPP/SoapyFCDPP/SoapyFCDPP.cpp:228:9: note: here
case SND_PCM_STATE_XRUN:
^~~~
make[2]: *** [CMakeFiles/FCDPPSupport.dir/build.make:63: CMakeFiles/FCDPPSupport.dir/SoapyFCDPP/SoapyFCDPP.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:73: CMakeFiles/FCDPPSupport.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
Using SoapySDR version 0.8.0:
root@sdr:/usr/src/SoapyFCDPP/build# SoapySDRUtil --info
######################################################
######################################################
Lib Version: v0.8.0-g351896d3
API Version: v0.8.0
ABI Version: v0.8
Install root: /usr/local
Search path: /usr/local/lib/SoapySDR/modules0.8
Module found: /usr/local/lib/SoapySDR/modules0.8/libremoteSupport.so (0.6.0-c09b2f1)
Module found: /usr/local/lib/SoapySDR/modules0.8/libsdrPlaySupport.so (0.3.0-208f95d)
Available factories... remote, sdrplay
Available converters...
In a Raspberry PI 4 running Raspbian 10.7. Can help me about this error ?
I'm trying the FCDPP Soapy support with CubicSDR 0.2.5.
On the GUI we have 3 gain settings: IF, LNA and Mixer corresponding to what SoapyUtil displays about this SDR.
$ SoapySDRUtil --probe
######################################################
######################################################
Probe device
[INFO] Found device: 0005:0004:02
[DEBUG] getSettingInfo
[DEBUG] getFullDuplex
[DEBUG] hasGainMode
[INFO] listAntennas
[DEBUG] getGainRange
[DEBUG] getGainRange
[DEBUG] getGainRange
[DEBUG] getGainRange
[DEBUG] getGainRange
[DEBUG] getGainRange
[INFO] listFrequencies
[INFO] getFrequencyRange
[INFO] getBandwidth
[INFO] listFrequencies
[INFO] getFrequencyRange
[INFO] getFrequencyArgsInfo
[INFO] listSampleRates
[INFO] listBandwidths
driver=FCDPP
hardware=FCDPP
Channels: 1 Rx, 0 Tx
Timestamps: NO
Full-duplex: NO
Supports AGC: NO
Stream formats: CS16, CF32
Native format: CS32 [full-scale=1.67772e+07]
Antennas: RX
Full gain range: [0, 61] dB
LNA gain range: [0, 1, 1] dB
Mixer gain range: [0, 1, 1] dB
IF gain range: [0, 59, 1] dB
Full freq range: [0.15, 240], [420, 1900] MHz
RF freq range: [0.15, 240], [420, 1900] MHz
Sample rates: 0.192 MSps
No issue with If Gain,
But the 2 others stays always to 0 even if I move the selector, see screenshot.
I don't know if it's a CubicSDR issue or a FCDPP Soapy driver issue.
As LNA and Mixer can only be enabled or disabled, I wonder if it could be implemented as switch options like bias-tee on some other SDRs instead of gain settings.
I'm using utuntu 18.04
$ meson build
The Meson build system Version: 0.45.1 Source dir: /home/nicolas/Applis/SDR/SoapyFCDPP/SoapyFCDPP Build dir: /home/nicolas/Applis/SDR/SoapyFCDPP/SoapyFCDPP/build Build type: native build Project name: SoapyFCDPP Native C compiler: cc (gcc 7.3.0 "cc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0") Native C++ compiler: c++ (gcc 7.3.0 "c++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0") Build machine cpu family: x86_64 Build machine cpu: x86_64 Found pkg-config: /usr/bin/pkg-config (0.29.1) Native dependency SoapySDR found: YES 0.7.0 Native dependency hidapi-libusb found: YES 0.8.0-rc1 Native dependency alsa found: YES 1.1.3 Build targets in project: 1 Found ninja-1.8.2 at /usr/bin/ninja
But Build fails:
$ ninja -C build
ninja: Entering directory
build'
[3/4] Compiling C++ object 'soapyfcdpp@sha/SoapyFCDPP.cpp.o'.
FAILED: soapyfcdpp@sha/SoapyFCDPP.cpp.o
c++ -Isoapyfcdpp@sha -I. -I.. -I/usr/local/include -I/usr/include/alsa -I/usr/include/hidapi -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -std=c++11 -O0 -g -fPIC -MD -MQ 'soapyfcdpp@sha/SoapyFCDPP.cpp.o' -MF 'soapyfcdpp@sha/SoapyFCDPP.cpp.o.d' -o 'soapyfcdpp@sha/SoapyFCDPP.cpp.o' -c ../SoapyFCDPP.cpp
In file included from ../SoapyFCDPP.cpp:1:0:
../SoapyFCDPP.hpp: In constructor ‘SoapyFCDPP::SoapyFCDPP(const string&)’:
../SoapyFCDPP.hpp:39:12: warning: ‘SoapyFCDPP::d_frequency’ will be initialized after [-Wreorder]
double d_frequency;
^~~~~~~~~~~
../SoapyFCDPP.hpp:38:18: warning: ‘const double SoapyFCDPP::d_sample_rate’ [-Wreorder]
const double d_sample_rate;
^~~~~~~~~~~~~
../SoapyFCDPP.cpp:7:1: warning: when initialized here [-Wreorder]
SoapyFCDPP::SoapyFCDPP(const std::string &path) :
^~~~~~~~~~
../SoapyFCDPP.cpp: In member function ‘virtual int SoapyFCDPP::readStream(SoapySDR::Stream*, void* const*, size_t, int&, long long int&, long int)’:
../SoapyFCDPP.cpp:167:86: error: no matching function for call to ‘min(uint32_t&, const size_t&)’
frames = snd_pcm_readi(d_pcm_handle, &d_buff[0], std::min(d_period_size, numElems));
^
In file included from /usr/include/c++/7/vector:60:0,
from /usr/local/include/SoapySDR/Types.hpp:14,
from /usr/local/include/SoapySDR/Device.hpp:14,
from ../SoapyFCDPP.hpp:12,
from ../SoapyFCDPP.cpp:1:
/usr/include/c++/7/bits/stl_algobase.h:195:5: note: candidate: template const _Tp& std::min(const _Tp&, const _Tp&)
min(const _Tp& __a, const _Tp& __b)
^~~
/usr/include/c++/7/bits/stl_algobase.h:195:5: note: template argument deduction/substitution failed:
../SoapyFCDPP.cpp:167:86: note: deduced conflicting types for parameter ‘const _Tp’ (‘unsigned int’ and ‘size_t {aka long unsigned int}’)
frames = snd_pcm_readi(d_pcm_handle, &d_buff[0], std::min(d_period_size, numElems));
^
In file included from /usr/include/c++/7/vector:60:0,
from /usr/local/include/SoapySDR/Types.hpp:14,
from /usr/local/include/SoapySDR/Device.hpp:14,
from ../SoapyFCDPP.hpp:12,
from ../SoapyFCDPP.cpp:1:
/usr/include/c++/7/bits/stl_algobase.h:243:5: note: candidate: template<class _Tp, class _Compare> const _Tp& std::min(const _Tp&, const _Tp&, _Compare)
min(const _Tp& __a, const _Tp& __b, _Compare __comp)
^~~
/usr/include/c++/7/bits/stl_algobase.h:243:5: note: template argument deduction/substitution failed:
../SoapyFCDPP.cpp:167:86: note: deduced conflicting types for parameter ‘const _Tp’ (‘unsigned int’ and ‘size_t {aka long unsigned int}’)
frames = snd_pcm_readi(d_pcm_handle, &d_buff[0], std::min(d_period_size, numElems));
^
In file included from /usr/include/c++/7/algorithm:62:0,
from ../SoapyFCDPP.cpp:4:
/usr/include/c++/7/bits/stl_algo.h:3450:5: note: candidate: template _Tp std::min(std::initializer_list<_Tp>)
min(initializer_list<_Tp> __l)
^~~
/usr/include/c++/7/bits/stl_algo.h:3450:5: note: template argument deduction/substitution failed:
../SoapyFCDPP.cpp:167:86: note: mismatched types ‘std::initializer_list<_Tp>’ and ‘unsigned int’
frames = snd_pcm_readi(d_pcm_handle, &d_buff[0], std::min(d_period_size, numElems));
^
In file included from /usr/include/c++/7/algorithm:62:0,
from ../SoapyFCDPP.cpp:4:
/usr/include/c++/7/bits/stl_algo.h:3456:5: note: candidate: template<class _Tp, class _Compare> _Tp std::min(std::initializer_list<_Tp>, _Compare)
min(initializer_list<_Tp> __l, _Compare __comp)
^~~
/usr/include/c++/7/bits/stl_algo.h:3456:5: note: template argument deduction/substitution failed:
../SoapyFCDPP.cpp:167:86: note: mismatched types ‘std::initializer_list<_Tp>’ and ‘unsigned int’
frames = snd_pcm_readi(d_pcm_handle, &d_buff[0], std::min(d_period_size, numElems));
^
../SoapyFCDPP.cpp: In member function ‘virtual void SoapyFCDPP::setGain(int, size_t, const string&, double)’:
../SoapyFCDPP.cpp:261:21: warning: suggest parentheses around comparison in operand of ‘!=’ [-Wparentheses]
} else if (name == "IF" != d_if_gain != value){
~~~~~^~~~~~~
../SoapyFCDPP.cpp:261:29: warning: suggest parentheses around comparison in operand of ‘!=’ [-Wparentheses]
} else if (name == "IF" != d_if_gain != value){
~~~~~~~~~~~~~^~~~~~~~~~~~
ninja: build stopped: subcommand failed.`
Can see the Funcube Dongle is detected from CubicSDR devices list.
When I try to start streaming from CubicSDR, SoapySDRServer dies with:
SoapyServerListener::accept([::ffff:192.168.1.77]:45034)
ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM not found
Error opening PCM device not found
Console output from CubicSDR:
[INFO] setup stream
Stream setup failed, stream is null. std::exception
SDR Thread stream init error.
[ERROR] SoapyLogAcceptor::handlerLoop(tcp://192.168.1.3:55132) FAIL: SoapyRPCUnpacker::recv(header) FAIL:
Server version: 0.5.2-unknown
# SoapySDRUtil --probe
######################################################
## Soapy SDR -- the SDR abstraction library ##
######################################################
Probe device
[ERROR] avahi_service_browser_new() failed: Bad state
[INFO] makeFCDPP
[INFO] listAntennas
[INFO] listFrequencies
[INFO] getFrequencyRange
[INFO] getBandwidth
[INFO] listFrequencies
[INFO] getFrequencyRange
[INFO] getFrequencyArgsInfo
[INFO] listSampleRates
[INFO] listBandwidths
----------------------------------------------------
-- Device identification
----------------------------------------------------
driver=FCDPP
hardware=FCD
----------------------------------------------------
-- Peripheral summary
----------------------------------------------------
Channels: 1 Rx, 0 Tx
Timestamps: NO
Other Settings:
* period [key=period, default=0, type=int, range=[96, 48000, 960]]
----------------------------------------------------
-- RX Channel 0
----------------------------------------------------
Full-duplex: NO
Supports AGC: NO
Stream formats: CS16, CF32
Native format: CS16 [full-scale=32767]
Full gain range: [0, 97] dB
LNA gain range: [-5, 30, 2.5] dB
Mixer gain range: [4, 12, 8] dB
IF gain range: [3, 57, 1] dB
Full freq range: [0.15, 240], [420, 1900] MHz
RF freq range: [0.15, 240], [420, 1900] MHz
Sample rates: 0.096 MSps
libsoapdysdr 0.8.1
Funcube plus on Rasperry Pi 4 on OpenWebSDR+
The demodulation mode changes but not the frequency when changing bands, the 1st RX frequency stays and does not change. I have to disable the funcube and and enable it to change 2024-09-03 08:55:52,496 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] listFrequencies
2024-09-03 08:55:52,496 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] getFrequency
2024-09-03 08:57:18,564 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] listFrequencies
2024-09-03 08:57:19,564 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: �[1m�[31m[ERROR] setFrequency failed to set device frequency�[0m
2024-09-03 08:57:19,564 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] getFrequency
2024-09-03 08:58:25,425 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] listFrequencies
2024-09-03 08:58:25,425 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] getFrequency
2024-09-03 09:19:10,880 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: received signal: 15
2024-09-03 09:19:10,949 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] deactivate stream
2024-09-03 09:19:20,894 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - Started sdr source: soapy_connector -s 192000 -f 24924600 -p 49205 -c 49471 -d driver=fcdpp
2024-09-03 09:19:20,899 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: setting up control socket...
2024-09-03 09:19:20,899 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: control socket started on 49471
2024-09-03 09:19:20,900 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: socket setup complete, waiting for connections
2024-09-03 09:19:20,958 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] makeFCDPP
2024-09-03 09:19:20,963 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] listFrequencies
2024-09-03 09:19:20,965 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] getFrequency
2024-09-03 09:19:20,967 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] setup stream
2024-09-03 09:19:20,997 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: client connection established
2024-09-03 09:19:20,998 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: control connection established
2024-09-03 09:19:21,004 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - WARNING - STDERR: [INFO] activate stream
2024-09-03 09:19:21,540 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: closing client socket
2024-09-03 09:27:44,683 - owrx.source.ffa774a3-e9a6-48f2-ab25-1c0410cb7210 - INFO - STDOUT: client connection established
In windows7 Funcube Pro plus dongle is recognized as an audio device.
Using Zadig does not help either.
Any ideas ?
Hi,
Is alsa-base enough ?
Thanks a lot.
J-Luc F1JEK
Hi,
Managed to get the Funcube Pro+ working under OpenwebRX. Thanks for that!
But....the ppm-value has no effect whatsoever.
"Funcube": {
"name": "Funcube Pro+",
"type": "fcdpp",
"ppm": 8,
"rf_gain": 0,
"samp_rate": 192000,
"profiles": {
This is a universal parameter, so....
Who can help?
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.