sgminer-dev / sgminer Goto Github PK
View Code? Open in Web Editor NEWScrypt GPU miner
License: GNU General Public License v3.0
Scrypt GPU miner
License: GNU General Public License v3.0
The API reports the hash rate in MH and only includes 2 decimals in the display so converted into KH, you only get a precision of 10. In a separate fork of cgminer (wolf0), there's a fix that I think you should implement as well.
https://github.com/wolf9466/cgminer/commit/4418a4af716e4bc04a785657c4741793eb640d81
Link in the ADL_SDK folder point to
http://developer.amd.com/tools-and-sdks/heterogeneous-computing/amd-accelerated-parallel-processing-app-sdk/downloads/
Which is for the APP SDK.
The ADL SDK is located at:
http://developer.amd.com/tools-and-sdks/graphics-development/display-library-adl-sdk/
Everytime I start up sgminer it throws an error.
[21:33:26] Started sgminer 4.0.0
[21:33:26] Loaded configuration file /home/nate/.sgminer/sgminer.conf
[21:33:26] Fatal JSON error in configuration file.
[21:33:26] Configuration file could not be used.
[21:33:26] Need to specify at least one pool server.
sgminer.conf:
{
"pools" : [
{
"url" : "http://107.170.7.72:19327",
"user" : "6zLgmL9pE4LfrwKPM6XhUQ1CCBZ9jTLWrv",
"pass" : "x"
}
]
,
"intensity" : "13,
"xintensity" : "0,
"rawintensity" : "0",
"worksize" : "256",
"kernel" : "scrypt",
"lookup-gap" : "0",
"thread-concurrency" : "16384",
"shaders" : "0",
"api-mcast-port" : "4028",
"api-port" : "4028",
"expiry" : "120",
"failover-switch-delay" : "60",
"gpu-dyninterval" : "7",
"gpu-platform" : "0",
"gpu-threads" : "2",
"log" : "5",
"no-pool-disable" : true,
"queue" : "1",
"scan-time" : "30",
"tcp-keepalive" : "30",
"shares" : "0",
"kernel-path" : "/usr/local/bin"
}
Reaper is an older opencl scrypt miner, it may have a different scrypt implementation that has ideas we can steal:
Patches are available to cgminer
http://rmdavidson.blogspot.ca/2014/01/cgminer-372-scrypt-jane-patch-windows.html
As outlined here slush0/stratum-mining-proxy#35
CGMiner 3.7.2 uses an incorrect extra nonce value so the mining proxy wont work. Im trying to find where in CGMiner 3.7.2+ its change but i thought i would post up here as i am not great at coding.
Would be great to have all my rigs pointing at the mining proxy.
There appears to be an omission in the latest commit that breaks the "pools" setting. See Ln. 1257 & 1258 in sgminer.c de08e71. I came across this the other night while trying to figure out why sgminer wasn't reading my pool information from the configuration file. Recompiling with those lines restored fixed the issue.
Have a separate section in the .conf
that can hold custom data. An example would be:
"pools" : [
{
"url" : "***",
"user" : "***",
"pass" : "***"
}
],
"custom" : [
{
"machine-name": "foo",
"comment" : "Doesn't support X/Y/Z, but talk to Ralph about it"
"bar" : "baz"
}
],
"temp-cutoff" : "90",
"temp-target" : "80",
...
The custom response should be sent back as response to the CONFIG API request.
These settings are currently set for the ideals of bitcoin mining, they are related to the block time.
Some discussion in the context of DOGECOIN's block times here
http://www.reddit.com/r/dogecoin/comments/1ui3bx/increase_such_hashrate_1_to_5_scrypt_tweaking/ceicnyv
After the latest modifications, where all the kernels are inside the /kernel folder, if you specify any kernel to the config file it fails to load.
If you move the kernel from the folder to the root folder of sgminer it all works ok.
I would like to be able to set all tuning aspects remotely, such as worksize, lookup-gap, thread-concurrency, threads, and so on, but so that these settings will be placed in a .conf file on issuing the API-command 'save' only (I realize changing these runtime may be impossible).
I've found that some of my GPUs (r9 290s) will run at a higher memory clock but will crash instantly if it is set that way from the start. If, however, I set them to be 100MHz lower than that, give them a few minutes at that rate, then up them to the higher clock, they work perfectly. It's a pretty specific issue and all else works; so, not a big deal. Also, I was thinking that this could be beneficial for PSUs as well. This way the power load could be more controlled and increased instead of spiking all at once. Might save a few PSUs. Just an idea.
No hard-coded stuff that only works on one card from one manufacturer.
Investigate:
How stable are these?
Provide docs, too.
Hi, I have a double Sapphire R9 290x. I have installed the latest Catalyst driver, ADL_SK 6.0 and AMD APP 2.9. I compiled sgminer from sources. When i do sgminer -n i see these errors with Overdrive5 (which is weird because R9 are supposed to use Overdrive6)
[18:19:09] CL Platform 0 vendor: Advanced Micro Devices, Inc.
[18:19:09] CL Platform 0 name: AMD Accelerated Parallel Processing
[18:19:09] CL Platform 0 version: OpenCL 1.2 AMD-APP (1348.5)
[18:19:09] Platform 0 devices: 2
[18:19:09] 0 Hawaii
[18:19:09] 1 Hawaii
[18:19:09] GPU 0 AMD Radeon R9 290 Series hardware monitoring enabled
[18:19:09] GPU 0 BIOS partno.: 113-C6710150-102, version:
015.039.000.007.003526, date: 10/03/13 15:00
[18:19:09] GPU 1 AMD Radeon R9 290 Series hardware monitoring enabled
[18:19:09] Failed to ADL_Overdrive5_ODParameters_Get
[18:19:09] Failed to ADL_Overdrive5_ODPerformanceLevels_Get
[18:19:09] Failed to ADL_Overdrive5_ODPerformanceLevels_Get
[18:19:09] Failed to ADL_Overdrive5_FanSpeedInfo_Get
[18:19:09] Failed to ADL_Overdrive5_FanSpeed_Get for default value
[18:19:09] Failed to ADL_Overdrive5_PowerControl_get
[18:19:09] Dual GPUs detected: 1 and 0
[18:19:09] 2 GPU devices max detected
When i start mining i get Temp data just for one of the cards, the other is missing. Also the fan is running only on one card, even though the fan speed is shown also for the second card:
This leads to one card overheating and is obviously very bad ! cgminer 3.7.2 has the same issue :(
Currently --benchmark reports:
./sgminer --benchmark
[16:56:46] Cannot use benchmark mode with scrypt
Investigate why this isn't implemented, try to do so.
I have --temp-cutoff 88, now it's 90 C but still working.
I've the same issue on cgminer as well. When a card gets "disabled" cause the temperature goes over the limit, it never comes back.
I think we need a check to see if the card was effectively enabled and eventually perform a restart thread.
Hello,
Configure output is below:
------------------------------------------------------------------------
sgminer 4.0.0
------------------------------------------------------------------------
Configuration Options Summary:
libcurl(GBT+getwork).: Enabled: -Lc:/mingw/lib -lcurl -lcurldll
curses.TUI...........: FOUND: -lpdcurses
OpenCL...............: FOUND. GPU mining support enabled
ADL..................: SDK found, GPU monitoring support enabled
Compilation............: make (or gmake)
CPPFLAGS.............:
CFLAGS...............: -D WIN32_LEAN_AND_MEAN
LDFLAGS..............:
LDADD................: -Lc:/mingw/lib -lcurl -lcurldll compat/jansson-2.5/src/.libs/libjansson.a -lpthread -lOpenCL -lws2_32 -lm
Installation...........: make install (as root if needed, with 'su' or 'sudo')
prefix...............: /usr/local
GCC Version info is below:
$ gcc -v
Using built-in specs.
COLLECT_GCC=c:\mingw\bin\gcc.exe
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.8.1/configure --prefix=/mingw --host=mingw32 --build=mingw32 --without-pic --enable-shared --enable-static --with-gnu-ld --enable-lto --enable-libssp --disable-multilib --enable-languages=c,c++,fortran,objc,obj-c++,ada --disable-sjlj-exceptions --with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --with-gmp=/usr/src/pkg/gmp-5.1.2-1-mingw32-src/bld --with-mpc=/usr/src/pkg/mpc-1.0.1-1-mingw32-src/bld --with-mpfr= --with-system-zlib --with-gnu-as --enable-decimal-float=yes --enable-libgomp --enable-threads --with-libiconv-prefix=/mingw32 --with-libintl-prefix=/mingw --disable-bootstrap LDFLAGS=-s CFLAGS=-D_USE_32BIT_TIME_T
Thread model: win32
gcc version 4.8.1 (GCC)
Make output is below:
$ make
make all-recursive
make[1]: Entering directory `/home/Mike/sgminer-master'
Making all in lib
make[2]: Entering directory `/home/Mike/sgminer-master/lib'
GEN arg-nonnull.h
GEN c++defs.h
GEN warn-on-use.h
GEN signal.h
GEN string.h
make all-recursive
make[3]: Entering directory `/home/Mike/sgminer-master/lib'
make[4]: Entering directory `/home/Mike/sgminer-master/lib'
CC dummy.o
CC memmem.o
CC sigaction.o
CC sigprocmask.o
AR libgnu.a
make[4]: Leaving directory `/home/Mike/sgminer-master/lib'
make[3]: Leaving directory `/home/Mike/sgminer-master/lib'
make[2]: Leaving directory `/home/Mike/sgminer-master/lib'
Making all in compat
make[2]: Entering directory `/home/Mike/sgminer-master/compat'
Making all in jansson-2.5
make[3]: Entering directory `/home/Mike/sgminer-master/compat/jansson-2.5'
make all-recursive
make[4]: Entering directory `/home/Mike/sgminer-master/compat/jansson-2.5'
Making all in src
make[5]: Entering directory `/home/Mike/sgminer-master/compat/jansson-2.5/src'
CC dump.lo
CC error.lo
CC hashtable.lo
CC load.lo
CC memory.lo
CC pack_unpack.lo
CC strbuffer.lo
CC strconv.lo
CC utf.lo
CC value.lo
CCLD libjansson.la
make[5]: Leaving directory `/home/Mike/sgminer-master/compat/jansson-2.5/src'
make[5]: Entering directory `/home/Mike/sgminer-master/compat/jansson-2.5'
make[5]: Nothing to be done for `all-am'.
make[5]: Leaving directory `/home/Mike/sgminer-master/compat/jansson-2.5'
make[4]: Leaving directory `/home/Mike/sgminer-master/compat/jansson-2.5'
make[3]: Leaving directory `/home/Mike/sgminer-master/compat/jansson-2.5'
make[3]: Entering directory `/home/Mike/sgminer-master/compat'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/home/Mike/sgminer-master/compat'
make[2]: Leaving directory `/home/Mike/sgminer-master/compat'
Making all in ccan
make[2]: Entering directory `/home/Mike/sgminer-master/ccan'
CC opt/libccan_a-helpers.o
CC opt/libccan_a-opt.o
CC opt/libccan_a-parse.o
CC opt/libccan_a-usage.o
AR libccan.a
make[2]: Leaving directory `/home/Mike/sgminer-master/ccan'
make[2]: Entering directory `/home/Mike/sgminer-master'
CC sgminer-sgminer.o
CC sgminer-api.o
CC sgminer-util.o
CC sgminer-sha2.o
In file included from sha2.h:35:0,
from sha2.c:37:
config.h:361:0: warning: "_WIN32_WINNT" redefined [enabled by default]
#define _WIN32_WINNT 0x0501
^
In file included from c:\mingw\include\_mingw.h:35:0,
from c:\mingw\include\string.h:29,
from ./lib/string.h:28,
from sha2.c:35:
c:\mingw\include\sdkddkver.h:154:0: note: this is the location of the previous definition
# define _WIN32_WINNT _WIN32_WINNT_WIN2K
^
CC sgminer-logging.o
CC sgminer-driver-opencl.o
CC sgminer-ocl.o
CC sgminer-findnonce.o
CC sgminer-adl.o
CC sgminer-scrypt.o
CCLD sgminer.exe
sgminer-sgminer.o:sgminer.c:(.text+0x11b35): undefined reference to `llround'
sgminer-sgminer.o:sgminer.c:(.text+0x1cc48): undefined reference to `timeEndPeriod'
sgminer-sgminer.o:sgminer.c:(.text+0x1ef04): undefined reference to `timeBeginPeriod'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: sgminer-sgminer.o: bad reloc address 0x0 in section `.data'
collect2.exe: error: ld returned 1 exit status
make[2]: *** [sgminer.exe] Error 1
make[2]: Leaving directory `/home/Mike/sgminer-master'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/Mike/sgminer-master'
make: *** [all] Error 2
$
The windows-build.txt should be amended to include a comment about ensuring you update "/etc/fstab.sample" to "/etc/fstab", otherwise a ton of includes/libraries required for build are not present. Also, I needed to use the "-D WIN32_LEAN_AND_MEAN" build option in order to get past a winsock/winsock2 conflict. I can't seem to get around this issue with "llround" and "timeEndPeriod", though.
Hi,
I checked most of the kernel in the branch and the good thing is that they avoid hard coded values and thus are profitable for all.
On the other side, I found on the net many kernels that have hard coded values. From a performance point of view, can we reach better performance with the hard coded one? Do you have any observation with that?
In case it is better, my proposal is to generate one the fly the hard coded kernel at runtime based on the generic one and the configuration file of sgminer. i can do the piece of code for it.
As far as I understand it, at least from cgminer, you can simply restart the miner and it will reload the current .conf. So, if you put your tuning modifications into the current file and save, a simple remote restart API command will reload. In other words, the current restart functionality supports tuning in the current file, so I thought it would be easier to just build on that.
How about this, then: a launch mode that does not load any .conf file at all, but instead launches the API only and waits for a "load config" command. there's already at least one implementation of a cascading .conf file loader. Here's what a .conf could look like:
{
"api-listen" : true,
[...]
"no-config" : true
}
Then, upon issuing the command "load-config|filename", sgminer would load the config, parse (report any errors, of course), and then resume mining.
This way, remote tuning could get access to sgminer with no running mining at all, load whatever configuration is required (or even build one runtime and save via API). If a recoverable crash happens, sgminer goes back into no-config mode and awaits further instructions. If a non-recoverable crash happens, sgminer can simply restart using the previous .conf (which is no-config) and the system remains responsive.
Issue split from https://github.com/veox/sgminer/issues/4
Announcement: https://litecointalk.org/index.php?topic=4082
Kernels are already available in kernel/alexkar{new,old}.cl
in branch kernels
.
TODO:
ocl.c
, _initCl()
) - anything else except lookup-gap
?doc/KERNEL.md
).I am gonna try this fork. Just a question Cgminer isn’t capable of handling the latest series of graphics cards. There were a lot of crashes on exit.
For cgminer the solution was: in the adl.c file around line 472, just before the ADL_Overdrive5_FanSpeed_Get call, add a line above:
ga->DefFanSpeedValue.iSpeedType=ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
I can't find this line in adl.c. Have you adopted this solution or probably have a better fix? Is this still an issue?
I have unnamed servers in my config file
Connection status now reads
Connected to (null) (stratum) diff...
I suspect this is due to no name, if name == NULL, display hostname instead?
Being reported incorrectly on Feathercoin network.
For instance, at the time of writing:
cgminer shows 222
sgminer shows 14.6M
Ncurses interface is just blank with HD 5970 card. You have to revert to text-based interface only with -T. Happens with cgminer 3.72 too.
Looks like the OpenCL implementation for radeon card at least partially works, getting access to the driver code paths could allow us better performance than with a closed source (linux) proprietary blob.
Some notes (re bfgminer) here:
https://bugs.freedesktop.org/show_bug.cgi?id=72785
mphardy on IRC reports it doesn't crash if renamed to ckolivas.cl
. Must be a bug with kernel handling.
Veox, you gotta remove the check for ADL headers so I can properly cross-compile from Linux. Configure whines about not being able to check for them.
Starting up cgminer/bfgminer/sgminer under an RDP connection in windows results in not being able to properly detect the ADL interface, and hence no hardware control.
Fixing this up would be an improvement for windows users.
Unfortunately, I'm not a windows dev so I can't investigate this directly. But at least it's reported.
On Sat, Jan 25, 2014 at 03:24:07AM -0800, troky wrote:
Hi,
Here it is: https://www.dropbox.com/s/z92c88k8qoltgmw/sgminer.rar
Checked out from veox/sgminer/master and created local branch
- it compiles on Linux and VS2010 (x86 and x64)
- most changes are explicit casting from Xalloc() because MSVC++ requires that and I believe that practice should be followed
- all external libraries are statically linked (compiled in VS2010 from latest sources, including jansson)
- only requirement for Windows is VC++ 2010 redist package (x86 and/or x64)
- winbuild/config.h probably needs cleanup
- tested on my 2x R9 290 rig for >24h without problems
Regards,
troky
Haven't investigated yet, requested for a git repo URL instead.
In order to make comparisons to original intensity values, perhaps the number of shaders could be queried and listed on the [G]pu settings page.
This would allow things like, my I=13 is equal to xI = 8 for my card with 1024 shaders.
Pools in single file well when you are continuously mining litecoin, for example. But I prefer to mine new forks, and it takes too much time to update each conf file of my rigs. . But I think there could be some improvements.
I. Option --worker-name. It allows to use one pools.conf file for multiple rigs, but they will use different worker names.
Example of pools.conf:
"pools" :
[{
"url" : "stratum+tcp://sample.pool.com:1111",
"user" : "dummy",
"pass" : "x"
},
{
"url" : "stratum+tcp://another-sample.pool.com:2222",
"user" : "dummy",
"pass" : "x"
}]
If you have a rig with --worker-name set to 1, then it will connects as user 'dummy.1" with password x. It allows to monitor my rigs on pool's dashboard.
II. Auto-check for an updated pools conf.
I'd like to see something like this:
./sgminer --pools-list http://sample.com/pools.conf --pools-check-time 10
It checks for an updated pools.conf file every 10 minutes and switches to a new pool if there's updated conf file.
III. A simple format for .conf file. Example:
"pools" : [
{
"url" : "stratum+tcp://first-pool.com:1111",
"user" : "dummy.1",
"pass" : "x"
},
{
"url" : "stratum+tcp://second-pool.com:2222",
"user" : "dummy.1",
"pass" : "x"
},
{
"url" : "stratum+tcp://third-pool.com:3333",
"user" : "dummy.1",
"pass" : "x"
}
]
my suggestion:
{
"default-user" : "dummy",
"default-password" : "x",
"worker-name" : "1",
"pools" : [ "stratum+tcp://first-pool.com:1111", "stratum+tcp://second-pool.com:2222", "stratum+tcp://another-username:[email protected]:3333" ]
}
There is a default user and password, but pool #3 uses custom one (split via @).
Also, it would be better to disable or hide pool using a letter in front of the address, for example:
"pools" : [ "d:stratum+tcp://first-pool.com:1111"]
d - disabled
h - hidden
Do you intend to maintain API compatibility with cgminer? is this possible?
I know that CPU mining support is not really useful anymore, but it seems that it's completely removed from the source? Even with --enable-cpumining I can't build a working version on my Windows VM (which does apparently not emulate a proper GPU):
$ sgminer.exe -c ../sgminer.conf
[20:16:23] Started sgminer 4.0.0
[20:16:23] Loaded configuration file ../sgminer.conf
[20:16:23] clDevicesNum returned error, no GPUs usable
[20:16:23] All devices disabled, cannot mine!
Or am I missing something here?
Issue split from https://github.com/veox/sgminer/issues/4
Kernel is already available in kernel/zuikkis.cl
in branch kernels
.
TODO:
ocl.c
, _initCl()
) - anything else except lookup-gap
?doc/KERNEL.md
).P.S. should another version with #pragma unroll
still present be added? Perhaps leave it there, commented out?
--cmd-idle <arg> Execute a command when a device is allowed to be idle (rest or wait)
--cmd-sick <arg> Execute a command when a device is declared sick
--cmd-dead <arg> Execute a command when a device is declared dead
bfgminer (https://github.com/luke-jr/bfgminer) is a fork of cgminer which (among other things) has made significant improvements to the ncurses interface, perhaps its improvements can be cross ported to sgminer
I am running SMOS 1.3 and tried to install sgminer.
This worked on one of my rigs. But trying to install a few day's later on other rigs fails.
these are the install commands in the SMOS Sgminer install script.
mine stop
wget http://smos-linux.org/upgrade/sgminer.pl
wget http://smos-linux.org/upgrade/sgminer2.pl
rm -rf /opt/bamt/gpumon
mv sgminer2.pl /opt/bamt/gpumon
rm -rf /opt/bamt/common.pl
mv sgminer.pl /opt/bamt/common.pl
sleep 5
cd /opt/miners/
rm -rf cgminer
git clone https://github.com/veox/sgminer
cp /opt/ADL/include/* /opt/miners/sgminer/ADL_SDK/
cd /opt/miners/sgminer/
./autogen.sh
sleep 5
make clean
sleep 5
CFLAGS="-O2 -Wall -march=native -I /opt/AMDAPP/include/" LDFLAGS="-L/opt/AMDAPP/lib/x86" ./configure --enable-scr$
sleep 5
make
sleep 5
rm -rf /home/.script.sh
mv /root/smos/mining/sgminer/.sgminer.sh /home/.script.sh
chmod +x /home/.script.sh
clear
echo "sgminer 4.0.0 installed."
echo "SMOS-Linux.org"
echo "Now reboot your rig, and start mining"
This is the full output after starting sgminer:
[15:24:00] Started sgminer 4.0.0
[15:24:00] Loaded configuration file /etc/bamt/cgminer.conf
[15:24:00] Error in configuration file, partially loaded.
[15:24:00] Start sgminer with -T to see what failed to load.
[15:24:03] Unable to open ckolivas.cl or /opt/miners/sgminer/ckolivas.cl for rea
ding
[15:24:03] Failed to init GPU thread 0, disabling device 0
[15:24:03] Restarting the GPU from the menu will not fix this.
[15:24:03] Try restarting sgminer.
Press enter to continue:
[15:24:03] Unable to open ckolivas.cl or /opt/miners/sgminer/ckolivas.cl for reading
[15:24:03] Failed to init GPU thread 1, disabling device 1
Hope you can fix this, sgminer rocks!
With last commits i got this message when compiling:
adl.c In function 'init-adl'
adl.c:340:3: error 'struct AdapterInfo' has no member named 'iDrvIndex'
Patch incoming.
He's talking about when a pool disconnects or can't be reached. WHen this happens, cgminer switches to a backup pool and waits five minutes to switch back to the primary. The idea was, in theory, to make sure that the primary pool is actually stable before switching back.
The problem is that multipools forcibly disconnect everyone when they switch to a new coin, so if you are running a newer cgminer you miss out on five minutes of mining EVERY time they switch coins or rounds, which can be multiple times per hour and dozens of times per day. That's a lot of time to lose off your primary pool, especially when sometimes rounds are only 10-15 minutes long on some of the altcoins.
Introduced by veox@3b527f1
Looks like this now: veox@fd8d465
Perhaps demote the log message from WARNING to INFO, too.
sgminer
will not ship precompiled binaries. However, there are folks who want to use them.
So, provide something like --kernel-bin
, which would override --kernel
(and kernel compilation) altogether.
Saving a config file with [S] then [W] creates a sgminer.conf file that has
"kernel" : "scrypt",
in it, which causes sgminer to throw an error next time it is launched.
Currently, only API_MHS is available.
Issue split from https://github.com/veox/sgminer/issues/4
Announcement: https://bitcointalk.org/index.php?topic=369858.0
Kernel is not scheduled for any release yet. Needs investigation.
If you make changes to the intensities from a running instance of sgminer and you hit [W]rite, it writes the config without problems but upon reload it gives an error because it writes 0 value to the other unused intensities.
Also it doesn't write "gpu-threads" inside the config file
https://litecointalk.org/index.php/topic,6020.0.html
Looks like a bunch might be hard-coded, but perhaps there's things to be learned.
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.