perbothner / domterm Goto Github PK
View Code? Open in Web Editor NEWDOM/JavaScript-based terminal-emulator/console
Home Page: https://domterm.org
License: Other
DOM/JavaScript-based terminal-emulator/console
Home Page: https://domterm.org
License: Other
Hi there,
Just built domterm on macOS to check it out. These are the commands I had to run to end up with a working domterm binary:
(you need brew installed)
`
brew install automake
brew install json-c
brew install libwebsockets
brew install asciidoctor
export LDFLAGS="-L/usr/local/opt/openssl/lib -L/usr/local/lib -L/usr/local/opt/expat/lib"
export CFLAGS="-I/usr/local/opt/openssl/include/ -I/usr/local/include -I/usr/local/opt/expat/include"
export CPPFLAGS="-I/usr/local/opt/openssl/include/ -I/usr/local/include -I/usr/local/opt/expat/include"
`
then:
./configure make
I ended up with a working domterm binary that launches Firefox.
If anyone can add info how to get this working in Electron instead of Firefox, it'll be great!
I compiled libwebsockets from source like this:
$cd ~/Downloads
$git clone https://github.com/warmcat/libwebsockets
$cd libwebsockets
$mkdir build
$cd build
$cmake -DLWS_WITH_SSL=0 ..
After running this command, which runs successfully from the DomTerm local repository:
$./configure --with-libwebsockets=~Downloads/libwebsockets/build/
Then:
$make
I get the following error in the output of make:
In file included from server.c:2:0:
server.h:34:27: fatal error: libwebsockets.h: No such file or directory
Am using Ubuntu 16.04. Could you please help. Thanks in advance.
I saw that you reached out to black-screen about using terminal.js. This is great. Have you had any other successful dialogs with other js browser terminal implementations? Or are the needs of these various projects really that much different?
Also, could you list the implementations that use your terminal.js or have similar ones?
Does it make sense to extract that portion into it's own node module?
I found a number of terminals that looked semi-recent, but I'm sure you're more aware of the landscape:
Thanks for the great project
E.g. imagine you want to print some Lisp code on the console.
You can cover everything inside brackets (...)
in a logical block, e.g. print \033]110\007
before every (
and \033]111\007
after every )
(or maybe some other reserved escape code just for that purpose).
I would like to have some graphical support for that, like you have in some editors. I.e. when you hover with the mouse over some part, it will highlight the whole logical block, maybe excluding sub blocks, so that you visually see the matching start and end brackets.
This is what I would like to have for now, but see e.g. here for some other ideas (but I think I would prefer any of these hightlightings only when you hover the corresponding text).
Another extension which I could imagine for this is some automatic folding logic in some way (related to #54), where it either prints ...
and when you click on it, it will print the contents, and another click again folds it to ...
(maybe you can already get this via #54 but I can imagine that just some logical block which has this built-in would make it simpler). However, just the hover highlighting would be enough for me for now.
When searching on the domterm mailing list archives, I get the error:
ht://Dig error
htsearch detected an error. Please report this to the webmaster of this site by sending an e-mail to: [email protected] The error message is:
Unable to read word database file '/dh/mailman/linus/archives/private/domterm-discuss-domterm.org/htdig/db.words.db'
Did you run htdig?
I sent an email to the email address specified but it was rejected, so I report it here.
Hi,
I try another take on domterm on mac os x. Here is what I've done
What happened:
I also have a fresh Electron.app under ../ so the tree looks like
ls ../
DomTerm
Electron.app
and I can open electron manually with ./Electron.app/Contents/MacOS/Electron &
but ./bin/domterm results in nothing (no error, no log entry, nothing ....)
Hi it seems that the dependencies you recommend installing are not found:
sudo apt-get install git gcc make automake libjson-c-dev pkg-config asciidoctor libmagic-dev zlib1g-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
automake is already the newest version (1:1.16.1-1.1ubuntu1).
automake set to manually installed.
make is already the newest version (4.2.1-1.2).
pkg-config is already the newest version (0.29.1-0ubuntu2).
zlib1g-dev is already the newest version (1:1.2.11.dfsg-0ubuntu2).
gcc is already the newest version (4:8.3.0-1ubuntu1.2).
git is already the newest version (1:2.19.1-1ubuntu1.1).
The following packages were automatically installed and are no longer required:
libc6-dev:i386 libncurses-dev:i386 libncursesw5 libtinfo5 linux-libc-dev:i386 python-lzma python-parsley python-psutil python-twisted python-txsocksx python-wicd
python3-dateutil python3-pycountry python3-streamlink python3-websocket streamlink
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
ruby-asciidoctor
The following NEW packages will be installed:
asciidoctor libjson-c-dev libmagic-dev ruby-asciidoctor
0 upgraded, 4 newly installed, 0 to remove and 4 not upgraded.
Need to get 278 kB/310 kB of archives.
After this operation, 1,631 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Ign:1 http://se.archive.ubuntu.com/ubuntu cosmic/universe amd64 ruby-asciidoctor all 1.5.7.1-1
Err:2 http://se.archive.ubuntu.com/ubuntu cosmic/universe amd64 asciidoctor amd64 1.5.7.1-1
404 Not Found [IP: 194.71.11.165 80]
Ign:3 http://se.archive.ubuntu.com/ubuntu cosmic-updates/main amd64 libmagic-dev amd64 1:5.34-2ubuntu0.1
Err:1 http://se.archive.ubuntu.com/ubuntu cosmic/universe amd64 ruby-asciidoctor all 1.5.7.1-1
404 Not Found [IP: 194.71.11.165 80]
Err:3 http://security.ubuntu.com/ubuntu cosmic-updates/main amd64 libmagic-dev amd64 1:5.34-2ubuntu0.1
404 Not Found [IP: 194.71.11.165 80]
Unable to correct missing packages.
E: Failed to fetch http://se.archive.ubuntu.com/ubuntu/pool/universe/a/asciidoctor/ruby-asciidoctor_1.5.7.1-1_all.deb 404 Not Found [IP: 194.71.11.165 80]
E: Failed to fetch http://se.archive.ubuntu.com/ubuntu/pool/universe/a/asciidoctor/asciidoctor_1.5.7.1-1_amd64.deb 404 Not Found [IP: 194.71.11.165 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/f/file/libmagic-dev_5.34-2ubuntu0.1_amd64.deb 404 Not Found [IP: 194.71.11.165 80]
E: Aborting install.
It would be nice to let some hover-text appear when I move over some text with the mouse (such as additional information about some object, file, or so).
The terminal escape code syntax could be something like <start-hover>visible<mid-hover>hover-text<end-hover>
(similar syntax as hyperlinks). The hover text ideally could again contain other escape codes (such as support for colors).
domterm.org responds with a redirect to requests having "ru" in Accept-Language header. This redirect leads to a spammy Russian website.
Speaking in curl, here is a request with "ru":
$ curl "http://domterm.org/" -H "Accept-Language: ru" -v > /dev/null
<... some output omitted ...>
< HTTP/1.1 302 Found
< Date: Thu, 02 Aug 2018 18:27:47 GMT
< Server: Apache
< Location: http://news-of-wolrds.ru/06812
< Vary: Accept-Encoding
< Content-Length: 214
< Content-Type: text/html; charset=iso-8859-1
<
And here is request without "ru":
$ curl "http://domterm.org/" -H "Accept-Language: en" -v > /dev/null
<... some output omitted ...>
< HTTP/1.1 200 OK
< Date: Thu, 02 Aug 2018 18:34:43 GMT
< Server: Apache
< Last-Modified: Wed, 11 Jul 2018 23:32:58 GMT
< ETag: "2083-570c1aab75e33"
< Accept-Ranges: bytes
< Content-Length: 8323
< Vary: Accept-Encoding
< Content-Type: text/html
<
Thinking the problem is on my side, I've run these requests through Tor, but the behaviour persisted.
Basically, a while ago, I asked this StackOverflow question, about what escape code to use for collapsing/folding text.
Now I read in the DomTerm doc about show/hide button (via \e[16u
and \e[17u
), but the description is quite short, and I am not sure I fully understand if this is what I asked in my SO question, and how to use it. An example, maybe including a screenshot (or GIF) would be very nice.
DomTerm doesn't seem to send Ctrl+Tab, and sends a normal Tab instead.
My current DomTerm commit: 5f2efbb (current master)
This makes it easier to find the homepage.
(I know, if you scroll down to the Readme, you find it mentioned directly, but if it is directly there next to the project, at the beginning of the page, it is just easier click on it directly.)
The rafaelrinaldi/pure plugin of the fish shell seems to cause the mouse click functionality of DomTerm to stop working.
Sometimes, especially when i accidentally start typing too early (before the prompt is ready), my input gets written inside a <span class="editing">
, where my usual zsh autocompletion doesn't work.
DomTerm version is, as usual, the newest (740d082)
this command works
./bin/domterm help
html is displayed properly in the pager
./bin/domterm html share/domterm/help/domterm.html
this doesn't work, the cursor is stuck on new line and and cannot be freed or aborter. Domterm hangs and has to be closed.
This was tested on firefox and chrome on mac os x
sw_vers
ProductName: Mac OS X
ProductVersion: 10.15
It would be nice to be able to load CSS from an arbitrary file. For Terminator, I usually use a black background with green text, so it would be nice to be able to customize this without directly modifying DomTerm's CSS files.
I am working on this, but it's gone nowhere as of yet and I only have so much time, so if you're able to do this yourself, feel free.
I think it would be useful to have a section in the documentation where you list other projects/applications/tools which make use of some of the DomTerm features.
E.g. I added text folding support now to better_exchook.
Many other terminal emulators have the option to clear the scroll buffer + screen (e.g. in MacOSX Terminal: Cmd+K -> clear to start). This is pretty useful. Can we have that in DomTerm as well?
An overview of related projects would be very nice.
E.g. GraphTerm, Xterm.js, Hyper, GateOne, hterm, TermKit, Upterm, etc.
As the main point for this project is the extended HTML support via escape codes (or that is how I see it), it would be nice to point out how far or what kind of escape codes are supported in other terminal emulators. E.g. iTerm2 has a few extended escape codes.
Making it easier to install (as it currently has a large number of dependencies) might improve adoption and make it easier to use on a wider variety of systems.
I have no real opinion about which of the 3 is best.
(Note: to be 100% clear, this is just a suggestion, not a request to immediately start working on this.)
The launcher script works if you run it as ./bin/domterm
(starting from the source directory).
However, it doesn't work if you run it as just bin/domterm
.
Output (I stuck a #bin/bash -x
at the top) in the latter case:
++ which bin/domterm
- thisfile=bin/domterm
- test -L bin/domterm
++ sed -e 's|/bin$||'
+++ dirname bin/domterm
++ echo bin- DOMTERM_DIR=bin
- test -n ''
- JAVA=/home/bob/linuxbin/java
- EXTRA_ARG=
- case "$1" in
- EXTRA_ARG=--firefox
- exec /home/bob/linuxbin/java -cp bin/domterm.jar:bin/java_websocket.jar: -Djava.library.path=bin org.domterm.websocket.DomServer --firefox
Error: Could not find or load main class org.domterm.websocket.DomServer
I'll see if I can fix this myself.
The rendering seems is flickery and leaving various colors behind in some cells, especially while inside of NeoVim (alternate buffer). Is there some things to configure to make it render better? Or is it a known issue that needs work?
Relatively recently WSL switched to using the /c prefix rather than /mnt/c which breaks domterm on WSL. I'm use this ticket to track my work on debugging this.
qtdomterm /usr/local/bin/fish gives a blank white screen with no prompt.
domterm --chrome /usr/local/bin/fish works.
Also is the qt frontend the best frontend for Linux or is it better to use the electron one (which I've not tried yet)?
Maybe this is also just an issue of the documentation, and can be fixed by explaining that.
But I fail to understand why we need the native bin/domterm
at all. E.g. for Electron. Why would running electron
directly not work?
If the answer is that bin/domterm
starts some server which runs in the background and the JS code (where ever it is run, in Electron, Firefox, Chrome, etc) somehow communicates with that (I'm just guessing, I have no idea if this is the case; as said, it would be nice to make this clear in the doc):
Would it be possible to rewrite e.g. the Electron backend that this is not needed, and it all runs directly in the same Electron process? (Or why would that not be possible?)
It doesn't terminate immediately. This is obviously just a very minor annoyance/nitpick.
Could you please add an explicit license file so everyone knows exactly what terms this is available under?
Thanks!
Open a URL command in WSL doesn't correctly quote URLs passed to cmd.exe. The correct quoting for cmd.exe is "^&" for any &s in the URL. I've hacked around it locally for the moment. Do you have any preferred string replace implementations or should I reinvent the wheel?
Hi,
So, recently I started to work adding websocket support (with libwebsocket) to my application, which is an vitage text-based game engine, sort of behave like an multi-user time-shared terminal. The project use to deal with telnet protocol specifically, and it automatically turns on linemode and local echo during telnet negotiation.
In searching of similar stuff over websocket, I found xtermjs and also domterm. But it seems xtermjs specifically doesn't support any "telnet" client features, which means I would have to write line-editing support directly in my application.
I found this in DomTerm
"\e[80;97u"
"\e[80;99u"
"\e[80;108u"
"\e[80;112u"
Set input editing mode. The value 99 ('c') sets character mode; the value 108 ('l') sets line-editing mode. The value 97 ('a') set automatic mode, which switches between character mode and line-editing mode based on the mode of the inferior process (when using a PTY). The value 112 ('p' for "pipe") is like line-editing mode, but the inferiors doesn’t echo the input, so we have to do it. This mode is useful when the input is a pipe or some other non-tty stream.
Which seems to be doing what I wanted, but also it seems that it doesn't really belong to any sort of standard. Also, what would be the "mode of inferior process?" since I'm not really using an PTY. My question is, what is your suggestion?
Not only do I want to support raw domterm on an desktop computer, I may want to eventually support mobile clients with an webview or some other framing protocol .
Thanks
Seeing multiple issues with WSL currently. After tackling the build / basic run issues via #69 I'm now on a new set.
Behavior:
Starting an initial domterm results in a white screen.
Closing this window closes the window as expected.
Starting a second domterm results in a working domterm.
Starting a window via qtdomterm itself in this working instance works as expected.
However, if you close the windows at this point the only workaround for getting domterm working again is a series of killalls.
I verified that the initial domterm creates a "domterm" (not qtdomterm) process which the second qtdomterm somehow makes use of. The domterm started by the second domterm execution appears as "defunct" directly in ps.
This behavior is quite similar to what I've seen on the Mac.
Mozilla has announced plans to deprecate XUL. From their blog:
Consequently, we have decided to deprecate add-ons that depend on XUL, XPCOM, and XBL. We don’t have a specific timeline for deprecation, but most likely it will take place within 12 to 18 months from now.
Granted that DomTerm isn't an "add-on" per se, but I can't see Mozilla putting in a lot of effort to maintain XUL when they're going full steam ahead towards replacing it. So IMO it might be wise not to bother making an XUL version of DomTerm any more.
When running domterm via electron, as long as one window is already open, newly opened windows take longer to load than the initial one, and don't respect the window.geometry setting anymore.
The latter only occurs when opened via command, it gets the correct window size when opened via Ctrl+Shift+N (though it is just as slow).
domterm version 1.0.2 (52e20fd)
master
JAVA_HOME is the environment variable most (in my experience, at least) programs use to determine which Java to launch a program with. It's therefore likely to already be set by most users who don't have java in their path and run some other Java program regularly.
I like your approach of providing as good a terminal as possible, while providing a mechanism for extending it. This is very cool.
I noticed that xterm
and iTerm2
(mac) provide their own terminfo entries.
iTerm2 even had a command for generating a terminfo file. This I thought was ingenious.
iTerm2 has some custom escape sequences like downloading files in-band.
I notice that you are adding some custom extensions like displaying an image inline. Have you considered registering these in terminfo as well? Or were you able to leverage an existing raster/vector standard and just use data urls?
I'm not sure if this request is even realistic. Maybe terminfo is a thing of the past. It is a nice promise to be able to advertise your capabilities and have programs discover them and how to call them. Providing an escape sequence to produce the terminfo file seems like a great idea as well.
Just a feedback, changed some hard coded lines (for linux) to make ldomterm compiling on OSX.
diff --git a/autotools-aux/compile b/autotools-aux/compile
index 80e119e..8b93fff 120000
--- a/autotools-aux/compile
+++ b/autotools-aux/compile
@@ -1 +1 @@
-/usr/share/automake-1.15/compile
\ No newline at end of file
+/usr/local/opt/automake/share/automake-1.15/compile
\ No newline at end of file
diff --git a/autotools-aux/missing b/autotools-aux/missing
index 8ecf84a..66e4ccc 120000
--- a/autotools-aux/missing
+++ b/autotools-aux/missing
@@ -1 +1 @@
-/usr/share/automake-1.15/missing
\ No newline at end of file
+/usr/local/opt/automake/share/automake-1.15/missing
\ No newline at end of file
diff --git a/lws-term/Makefile.am b/lws-term/Makefile.am
index 8364e22..0d17401 100644
--- a/lws-term/Makefile.am
+++ b/lws-term/Makefile.am
@@ -13,7 +13,7 @@ LN_H = ln
LIBWEBSOCKETS_LIBARG = @LIBWEBSOCKETS_LIB@
bin_PROGRAMS = ldomterm
ldomterm_SOURCES = server.c utils.c protocol.c http.c io.c whereami.c junzip.c
-ldomterm_CFLAGS = -I/usr/include/json-c -I$(srcdir)/lws-term @LIBWEBSOCKETS_INCLUDES@
+ldomterm_CFLAGS = -I$(shell brew --prefix)/include -I$(shell brew --prefix)/include/json-c -I$(shell brew --prefix openssl)/include -I$(srcdir)/lws-term @LIBWEBSOCKETS_INCLUDES@
ldomterm_LDADD = $(LIBWEBSOCKETS_LIBARG) -lssl -lcrypto -lpthread -ljson-c -lutil -lz
#CLIENT_DATA_DIR = @datadir_relative@/domterm
CLIENT_DATA_DIR = .
diff --git a/lws-term/server.c b/lws-term/server.c
index 57ca657..84d1c32 100644
--- a/lws-term/server.c
+++ b/lws-term/server.c
@@ -7,7 +7,7 @@
#endif
#ifndef DEFAULT_BROWSER_COMMAND
-#define DEFAULT_BROWSER_COMMAND "xdg-open"
+#define DEFAULT_BROWSER_COMMAND "open"
#endif
#ifndef DEFAULT_ARGV
Once a stable release of this is made, we should try and get this into the Homebrew archives. (I can take the lead on this.)
I've already got an installation script in my personal tap that I use (https://github.com/rwhogg/homebrew-thirdparty/blob/master/domterm.rb); it doesn't meet Homebrew's requirements yet, and it doesn't do some things, but I can fix it when the time comes.
I wrote a new self-contained terminal emulator using DomTerm and qtwebengine. At this point it's pretty nice and I'm going to try using it as my primary terminal emulator.
However, it has only been built and run on Fedora 24, which has qtwebengine already packaged. I'd be interested to know how difficult it would be to build on other platforms, and generally how well it works.
What changes if any are needed for OS X?
Porting to Windows will presumably be non-trivial. It should be possible to (on W\Windows) replace the low-level pty stuff with code taken from some Windows terminal emulator such as mintty - some day.
The Client
class is really the thing communicating with us on the other side of the websocket. We're using the term to refer to the thing the server is communicating with on behalf of the thing on on the other side of the websocket... :-)
Emacs refers to what we're currently calling Client
as an "inferior". Per notes this probably not widely known nomenclature. We should decide on something less ambiguous, and then perform the refactoring.
Current candidates:
Application
Worker
HostApplication
HostProcess
I'll defer to Per on the naming, I'll go with anything other than Client
.
At least on MacOSX, in Firefox (the only backend I can currently use, because of this).
I'm on latest head b0e36f5.
Not sure if it is supposed to work or not.
MacOSX uses the super key + c/v for copy/paste. I see @sc
or @sv
being printed in the shell. But normally the terminal emulator should not catch and handle any of the super keys anyway (at least on MacOSX), but instead the application should handle that (in this case Firefox). Also, it seems to partly handle it, because the menu flashes (this happens on OSX when you press a key combination which is registered in the app menu, like copy/paste).
webview.cpp: In member function ‘virtual bool WebPage::certificateError(const QWebEngineCertificateError&)’:
webview.cpp:105:9: error: invalid use of incomplete type ‘const class QWebEngineCertificateError’
if (error.isOverridable()) {
^~~~~
In file included from /usr/include/qt/QtWebEngineWidgets/qwebengineview.h:48,
from /usr/include/qt/QtWebEngineWidgets/QWebEngineView:1,
from webview.h:55,
from webview.cpp:53:
/usr/include/qt/QtWebEngineWidgets/qwebenginepage.h:62:7: note: forward declaration of ‘class QWebEngineCertificateError’
class QWebEngineCertificateError;
^~~~~~~~~~~~~~~~~~~~~~~~~~
webview.cpp:108:24: error: invalid use of incomplete type ‘const class QWebEngineCertificateError’
msgBox.setText(error.errorDescription());
^~~~~
In file included from /usr/include/qt/QtWebEngineWidgets/qwebengineview.h:48,
from /usr/include/qt/QtWebEngineWidgets/QWebEngineView:1,
from webview.h:55,
from webview.cpp:53:
/usr/include/qt/QtWebEngineWidgets/qwebenginepage.h:62:7: note: forward declaration of ‘class QWebEngineCertificateError’
class QWebEngineCertificateError;
^~~~~~~~~~~~~~~~~~~~~~~~~~
webview.cpp:117:60: error: invalid use of incomplete type ‘const class QWebEngineCertificateError’
QMessageBox::critical(view(), tr("Certificate Error"), error.errorDescription(), QMessageBox::Ok, QMessageBox::NoButton);
^~~~~
In file included from /usr/include/qt/QtWebEngineWidgets/qwebengineview.h:48,
from /usr/include/qt/QtWebEngineWidgets/QWebEngineView:1,
from webview.h:55,
from webview.cpp:53:
/usr/include/qt/QtWebEngineWidgets/qwebenginepage.h:62:7: note: forward declaration of ‘class QWebEngineCertificateError’
class QWebEngineCertificateError;
^~~~~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [Makefile:1357: webview.o] Error 1
Hi, thank you for this promising piece of work (I'm playing around with kawa too these days, so really thank you!).
I nevertheless have issues building DomTerm On Linux ubuntu 15.10:
I configured with websockets
./configure --with-java_websocket=/home/rafik/work/installs/TooTallNate-Java-WebSocket-58d1778/dist/java_websocket.jar
Then make gives me an error:
org/domterm/websocket/DomServer.java:198: error: method does not override or implement a method from a supertype
@OverRide
^
Note: org/domterm/ClassBackend.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Anything wrong with my procedure?
Keep on with the great work,
Rafik
When i'm connected over ssh and sudo any command, every character i type during that password prompt gets shown inside the <span class="pending">
, which, for a password prompt, is quite unfortunate.
I'm at the current masters HEAD again (572231e).
This is just a suggestion.
Currently, the homepage looks extremely outdated, like something from the 90ies. When I saw it first, I closed it again as I thought this project is probably abadoned since a long time. Only accidently I found later this GitHub repo and was very confused that it is still alive, based on the homepage I have seen earlier. This is not a good impression, esp not for such a project, which is really actually something extremely modern. (Of course, some other people maybe would go the other extreme, declare this as a next-gen terminal emulator in bold fonts, with some very fancy style. This is also not what I'm suggestion here.)
Some options:
Maybe changing the background color, the font, and maybe slightly the CSS already fixes this. (I'm really not a web designer, so unfortunately I cannot really help there.)
Maybe just use readthedocs.io instead? This integrates nicely into GitHub. You can have the documentation directly in the repository, and every time you push, it will automatically update the docs.
Or GitHub pages, and some of the existing default style files (which all look very simplistic and modern).
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.