phiilu / mailman Goto Github PK
View Code? Open in Web Editor NEWMailman is a GUI to help you manage your email accounts stored in a MySQL/MariaDB database.
License: MIT License
Mailman is a GUI to help you manage your email accounts stored in a MySQL/MariaDB database.
License: MIT License
I searched for hours, learning about the SHA512 implemenation of dovecot and js...
To find that passwords with some special characters are not handeled correcly in your implementaion.
But thanks for Mailman anyway!
Guten Morgen ^^,
Ich wollte mal fragen ob man die Rails-Anwendungen "NUR" mit Nginx zum laufen bekommt oder ob es eine Lösung für Apache2-Webserver gibt da meine ganzen anwendungen mit Apache2 laufen und ich aus der Nginx Config nicht wirklich schlau werde bzw. zu faul bin um mich bei Nginx reinzulesen und meinem Kollegen der den server mitnutzt bei Nginx anzulernen.
Ich weiß nicht mehr weiter bekomme Folgende Fehlermeldung
deploy@mail:~/mailman$ cap install STAGES=production --trace cap aborted! LoadError: cannot load such file -- capistrano/scm/git /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in
require'
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require' /home/deploy/mailman/Capfile:15:in
<top (required)>'
/usr/lib/ruby/vendor_ruby/rake/rake_module.rb:28:in load' /usr/lib/ruby/vendor_ruby/rake/rake_module.rb:28:in
load_rakefile'
/usr/lib/ruby/vendor_ruby/rake/application.rb:689:in raw_load_rakefile' /usr/lib/ruby/vendor_ruby/rake/application.rb:94:in
block in load_rakefile'
/usr/lib/ruby/vendor_ruby/rake/application.rb:176:in standard_exception_handling' /usr/lib/ruby/vendor_ruby/rake/application.rb:93:in
load_rakefile'
/usr/lib/ruby/vendor_ruby/rake/application.rb:77:in block in run' /usr/lib/ruby/vendor_ruby/rake/application.rb:176:in
standard_exception_handling'
/usr/lib/ruby/vendor_ruby/rake/application.rb:75:in run' /usr/lib/ruby/vendor_ruby/capistrano/application.rb:15:in
run'
/usr/bin/cap:3:in <main>'
Add CRUD functionality for domains, accounts, aliases, tls policies
Authentication for admin users and non admin users
Validation for all forms
Improve data representation
Add Readme
Write documentation: How to deploy mailman
hey,
is it possible to add more than one (vmail-)admin?
would be great. :D
Hello,
Some time ago, I installed successfully the docker version of mailman and all was working fine. However, after some time without using it, I was trying to log in to the web UI getting the title's error "Error: Cannot read 'data' of undefined"
Performing docker logs on the container only returns "Mailman is running on http://127.0.0.1:4000/ in production mode", so I am a bit puzzled.
The only change I have performed on the server, unless my memory fails me, is that I have changed the postfix compatibility mode to 2, that effectively disables it. Reverting the change does not remove the error nor allows me to log in again.
Any ideas? Thanks!
Hey there,
I'm trying to include mailman into my Server installation Script:
But after installing im getting a white page similiar to:
#10
MAILMAN_HOST=0.0.0.0 = binds to IP
127.0.0.1 doesnt work at all.
Edit:
I'm installing mailman with this configuration:
https://github.com/shoujii/NeXt-Server/blob/master/script/mailman.sh
I'm trying to make an email message with an attachment . I'm using the command:
mailsend.exe -ct 600 -read-timeout 600 -smtp SMTPSERVER -ssl -port 465 -auth -domain MYDOMAIN +bc -f MYEMAIL -mime-type "text/plain" -name MYNAME -user SMTPACCOUNT -pass SMTPPASSWD -to ME -sub "attachment test" -msg-body d:/desktop/message.txt -v -aname "attachment" -attach "d:/desktop/attachment.txt,text/plain" -show-attach
and in the verbose output I get:
From: ME
Date: Mon, 16 May 2022 12:59:25 -0400
To: ME
X-Mailer: @(#) mailsend v1.20b (Windows)
X-Copyright: BSD. It is illegal to use this software for Spamming
[C] Welcome
[C]
[C]
[C] .
[S] 250 2.0.0 Ok: queued as 4L257y4jmKz1Wq
[C] QUIT
[S] 221 2.0.0 Bye
Notice: no attachment [and I can confirm that the email arrived un-attached-to. What did I do wrong?
Hi,
yesterday i installed a brand new Mailserver using Thomas Leisters tutorial and your Frontend.
I would like to use catchall-addresses, they work great if i add them directly to the Database, but it's not possible to add a catchall-address in the Frontend because the field Username has to be filled. Is it possible to switch this check off?
Best regards
Rudi
....
Hi,
What ist the standard password for the site admin?
Daniel
Hello,
I use the docker container and only get a white page.
The .env file:
MAILMAN_HOST=127.0.0.1
MAILMAN_PORT=4000
MAILMAN_BASENAME=/
"docker logs mailman" says:
Mailman is running on http://127.0.0.1:4000/ in production mode
My nginx configuration:
location /mailman/ {
proxy_pass http://127.0.0.1:4000/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
After opening the page with the browser, the log says:
Mailman is running on http://127.0.0.1:4000/ in production mode
GET / 304 4.963 ms - -
Anyboda got an idea?
Thanks in advance,
Thomas
Hello guys,
how can I uninstall Mailman again?
Hi, ich habe mailman als Docker installiert und es lief die ersten Minuten wunderbar. Habe einen apache2 proxy auf den Port zeigend. Ein paar email accounts eingerichtet und plötzlich kommt nur noch diese Fehlermeldung. Ich erkenne das Problem aber nicht. Docker läuft, Apache2 läuft, Postfix, Dovecot läuft, MariaDB läuft. Sieht alles OK aus.
docker logs 9244cfaaa841
- Mailman is running on http://127.0.0.1:4000/ in production mode
- GET / 200 10.258 ms - 636
- GET /static/css/main.b27653d9.css 200 1.016 ms - 68
- GET /static/js/main.7081a796.js 200 1.225 ms - 808422
- GET /service-worker.js 200 0.609 ms - 3162
- GET /favicon.ico 200 0.450 ms - 3870
- GET /static/css/main.b27653d9.css 304 0.700 ms - -
- GET /index.html?_sw-precache=8f10b86c753c780d773837fe7ef00ecf 200 1.345 ms - 636
- GET /static/js/main.7081a796.js 200 0.410 ms - 808422
- POST /api/auth/authenticate 200 215.311 ms - 203
- GET /api/domains 200 5.307 ms - 50
- GET /api/accounts 200 2.622 ms - 111
- GET /api/aliases 200 3.284 ms - 14
- GET /api/tlspolicies 200 3.353 ms - 290
- POST /api/accounts 200 105.506 ms - 240
- POST /api/aliases 200 3.523 ms - 167
- GET / 200 0.454 ms - 636
- POST /api/accounts 200 97.838 ms - 240
- PUT /api/accounts/2 200 4.242 ms - 243
- PUT /api/accounts/3 200 3.429 ms - 243
- PUT /api/accounts/2 200 2.859 ms - 243
- Mailman is running on http://127.0.0.1:4000/ in production mode
Apache2 Proxy:
`cat /etc/apache2/sites-available/mailman.conf
<VirtualHost *:80>
ServerName mailman.domain.org
Redirect / https://mailman.domain.org/
</VirtualHost>
<VirtualHost *:443>
ServerName mailman.domain.org
SSLEngine on
SSLHonorCipherOrder on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/letsencrypt/live/domain.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.org/privkey.pem
<Proxy *>
Order allow,deny
Allow from all
allow from localhost
</Proxy>
ProxyPass / http://localhost:4000/
ProxyPassReverse / http://localhost:4000/
</VirtualHost>
`
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9244cfaaa841 phiilu/mailman "node build/main.js" 5 hours ago Up 8 minutes mailman
Is there a way to access the database using a port other than the default? I tried changing .env with a line:
MAILMAN_HOST=127.0.0.1:4002
but that seemed to break the system, as no login was then possible. Is there a way to do this, or could I request some way to do it? I want to access a remote database via an SSH tunnel.
Hallo,
Währe es Eventuell möglich die Oberfläche etwas an mailcow Anzulehnen?
Also dass man einzelne Seite hat um Domains, Accounts, Aliases und TLS-Policies anzulegen?
Is there a way to write the IP address of the client to the log if a login fails? Then i can use Fail2ban to protect brutforce.
To make mailman open a unix socket for the web server I had to change the file:
/opt/mailman/build/main.js
where it was:
const server = app.listen(port, process.env.MAILMAN_HOST || "0.0.0.0", () => console.log("Mailman is running on http://%s:%d%s in %s mode", server.address().address, server.address().port, base, "production"));
I made:
var server;
if (process.env.MAILMAN_SOCKET) {
var fs = require('fs');
server = app.listen(process.env.MAILMAN_SOCKET, () => console.log("Mailman is running on socket %s in %s mode", process.env.MAILMAN_SOCKET, "production"), () => fs.chmodSync(process.env.MAILMAN_SOCKET, '666'));
} else {
server = app.listen(port, process.env.MAILMAN_HOST || "0.0.0.0", () => console.log("Mailman is running on http://%s:%d%s in %s mode", server.address().address, server.address().port, base, "production"));
}
In /opt/mailman/.env define:
MAILMAN_SOCKET=/path/to/socket
In nginx the configuration include:
proxy_pass http://unix:/path/to/socket:$uri$is_args$args;
Gibt es eine Möglichkeit mailman automatisch starten zu lassen?
https://www.npmjs.com/package/node-autostart
hatte ich ausprobiert:
-> npm install -g node-autostart
-> autostart enable -n "mailman" -p "/etc/mailman/" -c "npm start"
allerdings hat das Ganze nicht so geklappt.
Eventuell wäre es auch sinnvoll das Ootb anzubieten :)
Gruß,
Shoujii
Hallo,
ich hatte Mailman anfangs als Docker installiert. Funktionierte schlussendlich dann auch und zeigte alles an. Als ich vor ein paar Tagen drauf ging, waren angeblich keine Domains mehr eingetragen. Ich konnte auch keine hinzufügen. Habe Mailman dann direkt ohne Docker installiert, aber das Problem blieb bestehen. Wenn ich bei Add Domain auf Save Domain klicke, wird der Button grau und nichts passiert.
Die Datenbankzugangsdaten sollten passen. pm2 logs zeigt auch keine Fehler an.
In der Datenbank existieren die Daten noch.
Hi,
i just made an update and after it Mailman won't let me log in anymore.
mailman-error-1.log says: "Error: No database selected". After playing around with .env (new Variable) i took a closer lock at your last changes in db.js. Especially the line where the DB is selected.
Old: db: process.env.MAILMAN_DB_DATABASE
New: database: process.env.MAILMAN_DB_DATABASE
I changed this line back to the old version. And it works just fine.
Greetings from Munich
Rudi
In the current Version of the Tutorial of Thomas Leister is decribed that an Catch-All Adress has to be setup by setting the source_username to null.
Hallo,
Ich habe da ein kleines Problem unzwar komme ich nicht weiter wo ich die libapache2-mod-passenger installieren soll weil ich Folgenden fehler bekomme.
"sudo apt-get install libapache2-mod-passenger
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Einige Pakete konnten nicht installiert werden. Das kann bedeuten, dass
Sie eine unmögliche Situation angefordert haben oder, wenn Sie die
Unstable-Distribution verwenden, dass einige erforderliche Pakete noch
nicht erstellt wurden oder Incoming noch nicht verlassen haben.
Die folgenden Informationen helfen Ihnen vielleicht, die Situation zu lösen:
Die folgenden Pakete haben unerfüllte Abhängigkeiten:
libapache2-mod-passenger : Hängt ab von: libstdc++6 (>= 5.2) aber 4.9.2-10 soll installiert werden
E: Probleme können nicht korrigiert werden, Sie haben zurückgehaltene defekte Pakete."
wie kann ich dies Beheben ??
To support unix sockets for database access I had to change the file:
/opt/mailman/build/main.js
where it was:
const db = __WEBPACK_IMPORTED_MODULE_0_knex___default()({
client: process.env.MAILMAN_DB_ENGINE || "maria",
connection: {
host: process.env.MAILMAN_DB_HOST || "127.0.0.1",
user: process.env.MAILMAN_DB_USER,
password: process.env.MAILMAN_DB_PASSWORD,
db: process.env.MAILMAN_DB_DATABASE
}
});
I made:
const db = __WEBPACK_IMPORTED_MODULE_0_knex___default()({
client: process.env.MAILMAN_DB_ENGINE || "maria",
connection: {
unixSocket: process.env.MAILMAN_DB_SOCKET,
host: process.env.MAILMAN_DB_HOST,
user: process.env.MAILMAN_DB_USER,
password: process.env.MAILMAN_DB_PASSWORD,
db: process.env.MAILMAN_DB_DATABASE
}
});
I added the unixSocket and removed the default from host. It would be nice to add port too, for issue #38. After the change, there has to be either MAILMAN_DB_SOCKET or MAILMAN_DB_HOST in the .env file but not both.
Hallo zusammen,
ich habe mir ein Odroid N2+ gekauft und möchte darauf Docker laufen lassen. Nach der Installation und nach 2-3 neu starten geht alles super. Aber Irgendwann geht es gar nicht mehr und wenn ich irgend einen Docker-Befehl eingebe z.B. docker info oder docker ps dann passiert da nichts mehr.
Auf dem Gerät läuft ubuntu 20.04.1 was ich direkt von der Odroid-Seite runtergeladen habe.
Kann mir jemand helfen, dass es dauerhaft funktioniert und ich nicht jedesmal dass Image von Ubuntu auf MicroSD schreiben muss und alles wieder neu installieren muss.
Danke für eure Hilfe
Hallo,
ich habe folgendes Problem.
Ich habe mailman in der Deployment Version installiert. Hat auch soweit alles funktioniert. Nun hänge ich an dem Punkt, dass ich kein NGNIX habe sondern Apache2.
Dort habe ich eine neue .conf angelegt und dort den Reserve Proxy und URL Rewrite hinzugefügt.
Leider bekomme ich beim Aufruf der domain: kis.meinedomain.de/mailman nur eine weiße Seite angzeigt.
Die entsprechende Konfiguration schaut so aus:
<VirtualHost *:443>
ServerName kis.meinedomain.de
[SSLKonfiguration]
RewriteEngine on
RewriteRule ^/mailman$ /mailman/ [R]
ProxyPreserveHost On
ProxyPass /mailman http://localhost:4000/
ProxyPassReverse /mailman http://localhost:4000/
</VirtualHost>
Weißt du wo der Fehler liegt?
Hi Florian,
Thanks a lot for great job.
What is the initial password for login?
Deployed in subfolder like /mailman
is not working.
Appears like the api paths in client/src/services/api.js
are not mapped correctly.
Hi Phil,
tried the new version behind nginx /mailman
and there still is something odd.
It would be good to deliver status 404 when something was not found. eliminate the catch all.
Best,
M
Hey,
Danke erstmal für Mailman, bin durch das Tutorial von Herr Leistner auf dein Webinterface aufmerksam geworden. Ich hab es nicht in einem Docker laufen sondern per Hand aufgesetzt. Nun die Installation lief fehlerlos. Gestartet wurde Mailman auch erfolgreich. Hab ein Reverse Proxy im nginx angelegt aber ich erhalte nur eine weiße Seite.
location /mailman/ {
proxy_pass http://localhost:4000/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Er loggt auch meinen Zugriff:
0|mailman | Mailman is running on port 4000
0|mailman | GET / 200 6.671 ms - 636
0|mailman | GET / 304 2.629 ms - -
0|mailman | GET / 200 1.185 ms - 636
0|mailman | GET / 200 0.540 ms - 636
0|mailman | GET / 200 0.580 ms - 636
0|mailman | GET / 200 1.541 ms - 636
0|mailman | GET /static/css/main.ace391c0.css 200 1.312 ms - 10430
0|mailman | GET /static/js/main.49e128ea.js 200 0.704 ms - 769518
0|mailman | GET /favicon.ico 200 2.220 ms - 3870
Aber die Seite bleibt leider einfach weiß.
Hab ich was vergessen zu konfigurieren ? Bin eigentlich genau nach deiner Anleitung gegangen.
Gruß STX
Ich würde sehr gerne das Webinterface installieren, habe aber noch nie etwas mit Rails gemacht und bin vermutlich deswegen auf Probleme gestoßen. Vielleicht kann mir hier ja jemand helfen.
Auf der lokalen Maschine läuft erstmal alles glatt. Wenn ich dann per cap production deploy
deployen will bekomme ich aber (beim zweiten mal, datei ist erstellt) eine Fehlermeldung.
**DEPLOY FAILED
Aus dem Log kann ich auslesen, dass beim Command rbenv exec bundle install --path /home/deploy/mailman/shared/bundle --without development test --deployment --quiet
rbenv nur mit rbenv: bundle: command not found
geantwortet hat und deswegen der Deploy fehlgeschlagen ist.
Ich habe nun eine ganze Zeit lang probiert. bundler wurde vorher per apt-get installiert, dann hab ichs auch mit gem versucht. Durch Internet Recherche habe ich herausgefunden, dass das wohl mit der Vermischung von lokalen (user) variablen und globalen Variablen zu tun hat. Dazu auch dieser GitHub Issue. Ich habe ziemlich viel probiert, das Ergebnis hat sich aber nie geändert. Ich habe die Path Variablen (PATH und GEM_PATH) angepasst und mit mehr oder weniger geratetenen Pfaden gefüllt, mehrmals bundler per gem installiert und rbenv rehash
ausgeführt.
Immer das gleiche.
Kann mir hier vielleicht noch jemand einen Tipp geben, was ich ausprobieren kann um das Problem zu lösen?
Hallo, ich benutzte Mailman mit Docker in einem Subfolder.
Für die Weiterleitung nutze ich nginx.
Leider erhalte ich beim Aufruf von Mailman die folgende Fehlermeldung:
Refused to apply style from 'https://XXX.XY/mailman/static/css/main.27ff0ba0.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.
Das Dockerfile wurde mit der Eigenschaft: Subfolder gestartet und wurde auch in der .env bzw. bei NGINX so konfiguriert.
First of all, thank you for this great GUI, unfortunately I'm not a programmer.
Would it be possible to extend the "Add Alias" and "Edit Alias" webforms so that the username can actually be set 'null' in the database which would allow for "catchall" mail adresses to be created.
Maybe by adding a checkbox, to set it 'null' instead of the username additionally to the normal username input field.
To realize the catchall with the database, I have changed the database according to the advice on https://thomas-leister.de/mailserver-debian-stretch with this query:
alter table aliases modify source_username varchar(64) null;
And I have adjusted the query in the aliases.cf as well, as it says on Leisteres article:
query = SELECT concat(destination_username, '@', destination_domain) as destinations FROM aliases WHERE source_username ='%u' and source_domain ='%d' and enabled = true UNION ALL SELECT concat(destination_username, '@', destination_domain) as destinations FROM aliases WHERE source_username is null and source_domain ='%d' and enabled = true AND not exists (SELECT id FROM aliases WHERE source_username ='%u' and source_domain ='%d' and enabled = true);
Just let me know.
Many thanks,
Robert
Hallo
ich hätte eine kurze Frage zum Docker-Image:
docker run -d -p 4000:4000 --net="host" --env-file .env --name mailman phiilu/mailman
Beim verwenden des Parameters --net="host" wird der Port auf dem Host normalerweise auf die IP 0.0.0.0 gebindet und ist somit öffentlich erreichbar. Wieso ist das hier nicht der Fall?
!/bin/bash# netstat -ant | grep 4000
tcp 0 0 127.0.0.1:4000 0.0.0.0:* LISTEN
Wenn ich den Befehl wie folgt anpasse, ändert sich an der Ausgabe von netstat nichts, jedoch ist Mailman nicht länger erreichbar:
docker run -d -p 127.0.0.1:4000:4000 --env-file .env --name mailman phiilu/mailman
Warum?
Hey
Ich habe heute dein Mailman Setup mittels Docker Installiert.
und habe Bemertk dass die Quota Berechnung Extremst Falsch ist.
Weil 5GB Sind laut mailman "5370"
Währe da "5120" nicht eher Richtig?
Liebe Grüße
Hey,
just a quick question about that - is it able to get a external database connection working with mailman? I have my database external but the ENV variables didnt give me a way to define a DB HOST.
Best regards
The installation always fails with the following error:
18618 warn [email protected] No repository field.
18619 warn optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
18620 warn notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
18621 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Valid OS: darwin
18621 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Valid Arch: any
18621 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Actual OS: linux
18621 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Actual Arch: x64
18622 verbose stack Error: [email protected] install: `node-gyp rebuild`
18622 verbose stack Exit status 1
18622 verbose stack at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:304:16)
18622 verbose stack Exit status 1
18622 verbose stack at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:304:16)
18622 verbose stack at EventEmitter.emit (events.js:182:13)
18622 verbose stack at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
18622 verbose stack at ChildProcess.emit (events.js:182:13)
18622 verbose stack at maybeClose (internal/child_process.js:962:16)
18622 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:249:5)
18623 verbose pkgid [email protected]
18624 verbose cwd /var/www/mail/mailman
18625 verbose Linux 4.9.0-7-amd64
18626 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
18627 verbose node v10.8.0
18628 verbose npm v6.2.0
18629 error code ELIFECYCLE
18630 error errno 1
18631 error [email protected] install: `node-gyp rebuild`
18631 error Exit status 1
18632 error Failed at the [email protected] install script.
18632 error This is probably not a problem with npm. There is likely additional logging output above.
Hallo,
die Docker Installation funktioniert nicht. Nach dem starten des Docker Containers ist der Port 4000 nicht erreichbar. Ist dieses Problem bekannt?
Viele Grüße
Dominik
Good Evening,
before building i used the wrong mail adress for the MAILMAN_ADMIN in .env. I edited it and then eexecuted "npm run build" again. I see the GUI but when i try to authenticate i just get a "Something went wrong". I don't know what to do now more. Isn't there any log which can tell me more about the thing that went wrong? ;)
I apreciate for your work and hope for a soon answer to carry on on this mailserver project :/
Thanks!
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.