almalinux / mirrors Goto Github PK
View Code? Open in Web Editor NEWThe AlmaLinux project mirrors configuration and tools.
License: GNU General Public License v3.0
The AlmaLinux project mirrors configuration and tools.
License: GNU General Public License v3.0
Change https://github.com/AlmaLinux/mirrors/blob/mirrors_service/src/backend/api/handlers.py#L187-L190 to make the call with without_private_mirrors=True
We need to avoid checking if there is valid DNS for private mirrors. It's to be assume they may be using local DNS.
Context: https://chat.almalinux.org/almalinux/pl/qqhae7u3zffgdy4y7i9ubjdgye
Dears
The location is fine in maxmind GeoIP it shows the continent Asia but not reflected into https://mirrors.almalinux.org/
IP Address | Country Code | Location | Network | Postal Code | Approximate Coordinates* | Accuracy Radius (km) | ISP | Organization | Domain | Metro Code |
---|---|---|---|---|---|---|---|---|---|---|
212.138.72.17 | SA | Riyadh,Riyadh Region,Saudi Arabia,Asia | 212.138.64.0/20 | 24.6569,46.7179 | 5 | King Abdul Aziz City for Science and Technology | King Abdul Aziz City for Science and Technology |
Regards
Are there any plans to move to or otherwise utilize mirrormanager?
It does a really good job at solving the problem of making machines use local (private even, if desired) mirrors using the distro supplied "out of the box" .repo
files -- no need to edit to set baseurl
s etc.
Hi There,
sorry if I'm in the wrong place with this ticket. If I am please direct me to the right direction.
I have the following issue:
I have Pulp v3 (pulpcore https://github.com/pulp/pulpcore + pulp-rpm https://github.com/pulp/pulp_rpm). I use it to replicate various rpm repos, I also replicate repos from mirror.centos.org with no issues.
Last week I added AlmaLinux repos:
and I cannot synchronise AppStream and Base (here's how I do it: https://pulp-rpm.readthedocs.io/en/latest/workflows/create_sync_publish.html#sync-repository-foo-using-remote-bar ).
For AppStream I get this error message:
"No declared artifact with relative path \"images/boot.iso\" for content \"<DistributionTree: pk=ec636140-6053-4bdc-93f2-9f3dc9413d02>\""
For Base this:
"Incoming and existing advisories have the same id but different timestamps and non-intersecting package lists. It is likely that they are from two different incompatible remote repositories. E.g. RHELX-repo and RH
ELY-debuginfo repo. Ensure that you are adding content for the compatible repositories. Advisory id: ALBA-2021:0566"
From previous experience I can tell that something's wrong with the repos.
At some point during the last image building the master branch of git with the mirror configs got updated/pulled as root so now the mirror-service
user under which the scripts run cannot perform pulls from git.
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal systemd[1]: Starting Update a local mirrors list Service...
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: /etc/mirrors_service/prod/mirrors/updates /
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: Fetching origin
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: error: insufficient permission for adding an object to repository database .git/objects
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: fatal: failed to write object
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: fatal: unpack-objects failed
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: error: Could not fetch origin
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: HEAD is now at a8e8b95 Update config.yml
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: warning: Pulling without specifying how to reconcile divergent branches is
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: discouraged. You can squelch this message by running one of the following
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: commands sometime before your next pull:
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: git config pull.rebase false # merge (the default strategy)
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: git config pull.rebase true # rebase
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: git config pull.ff only # fast-forward only
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: You can replace "git config" with "git config --global" to set a default
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: preference for all repositories. You can also pass --rebase, --no-rebase,
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: or --ff-only on the command line to override the configured default per
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: invocation.
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: error: insufficient permission for adding an object to repository database .git/objects
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: fatal: failed to write object
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: fatal: unpack-objects failed
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: /
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: % Total % Received % Xferd Average Speed Time Time Time Current
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: Dload Upload Total Spent Left Speed
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: [158B blob data]
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: HTTP/1.1 200 OK
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: Server: nginx/1.14.1
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: Date: Thu, 25 Nov 2021 21:25:47 GMT
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: Content-Type: text/html; charset=utf-8
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: Content-Length: 581146
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: Connection: keep-alive
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: [1B blob data]
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: % Total % Received % Xferd Average Speed Time Time Time Current
Nov 25 21:25:47 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: Dload Upload Total Spent Left Speed
Nov 25 21:27:42 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: [9.0K blob data]
Nov 25 21:27:42 ip-172-30-145-101.ec2.internal local_mirrors_list.sh[154999]: {"result":"Done","status":"success","timestamp":1637875662}
Nov 25 21:27:42 ip-172-30-145-101.ec2.internal systemd[1]: local_mirrors_list.service: Succeeded.
Nov 25 21:27:42 ip-172-30-145-101.ec2.internal systemd[1]: Started Update a local mirrors list Service.
[root@ip-172-30-58-116 updates]# pwd
/etc/mirrors_service/prod/mirrors/updates
[root@ip-172-30-58-116 updates]# ls -lah
total 62M
drwxr-xr-x. 7 mirror-service mirror-service 229 Nov 17 18:04 .
drwxr-xr-x. 3 root root 61 Nov 17 15:38 ..
drwxr-xr-x. 8 mirror-service mirror-service 198 Nov 26 03:10 .git
drwxr-xr-x. 3 mirror-service mirror-service 23 Nov 17 14:53 .github
-rw-r--r--. 1 mirror-service mirror-service 43 Nov 17 14:53 .gitignore
-rw-r--r--. 1 mirror-service mirror-service 35K Nov 17 14:53 LICENSE
drwxr-xr-x. 2 mirror-service mirror-service 39 Nov 17 14:53 ci
-rw-r--r--. 1 root root 2.1K Nov 17 18:04 config.yml
-rwxr-xr-x. 1 mirror-service mirror-service 294 Nov 17 14:53 deploy.sh
drwxr-xr-x. 5 mirror-service mirror-service 83 Nov 17 14:53 docs
-rw-r--r--. 1 mirror-service mirror-service 62M Nov 17 14:53 geoip_db.mmdb
drwxr-xr-x. 2 mirror-service mirror-service 12K Nov 17 14:53 mirrors.d
-rwxr-xr-x. 1 mirror-service mirror-service 19K Nov 17 14:53 mirrors_update.py
-rw-r--r--. 1 mirror-service mirror-service 310 Nov 17 14:53 package.json
-rw-r--r--. 1 mirror-service mirror-service 49 Nov 17 14:53 requiremnts.txt
The result is that new mirrors and/or changes aren't able to be deployed.
I've fixed this on all current mirrors service servers but we need to fix this in the image next time we build images.
Using the instructions at https://wiki.almalinux.org/Mirrors.html to setup a cronjob:
0 */3 * * * /usr/bin/flock -n /var/run/almalinux_rsync.lock -c /usr/bin/rsync -avSH -f 'R .~tmp~' --delete-delay --delay-updates rsync://rsync.repo.almalinux.org/almalinux/ /almalinux/dir/on/your/server/
results in the following error: flock: -c requires exactly one command argument
To fix this, you can enclose the rsync command in quotes:
0 */3 * * * /usr/bin/flock -n /var/run/almalinux_rsync.lock -c "/usr/bin/rsync -avSH -f 'R .~tmp~' --delete-delay --delay-updates rsync://rsync.repo.almalinux.org/almalinux/ /almalinux/dir/on/your/server/"
We run our mirror on AlmaLinux of course :)
# cat /etc/redhat-release
AlmaLinux release 8.3 (Purple Manul)
# uname -r
4.18.0-240.15.1.el8_3.x86_64
# rpm -qa | grep util-linux
util-linux-2.32.1-24.el8.x86_64
# flock -V
flock from util-linux 2.32.1
Hi,
Our mirror has been fixed after a disk capacity problem, please can you re-add it? The mirror file its already on mirrors.d #614
Sorry for the problem, our internal monitoring system has been reconfigured to avoid this problems in the future.
Thanks
Regards
mirror.nju.edu.cn already exists almalinux mirror. Now the almalinux-vault mirror has been added, but I don't know how to add it to the mirrors list
http://mirror.nju.edu.cn/almalinux-vault/
https://mirror.nju.edu.cn/almalinux-vault/
rsync://mirror.nju.edu.cn/almalinux-vault/
Greetings, we have noticed that our mirror is listed as expired, however we are synced every 3 hours, what could be wrong?.
There should be a timeout when checking mirrors for availability that can be changed in config file.
I suppose default timeout should be 15 seconds for every connection.
Our mirror is synced but not listed on mirrors.almalinux.org, can anyone check ?
https://github.com/AlmaLinux/mirrors/blob/mirrors_service/src/backend/api/handlers.py#L105-L117
When a client matches against the network data service cone of a mirror, the list offered to them is appended up to LENGTH_CLOUD_MIRROR_LIST (5) with other nearby mirrors.
This list of additional mirrors can include private mirrors if the private mirror accidentally included geo data in their configuration.
This suitable_mirrors.extend also fails to check the health of these additional mirrors, meaning that the additional mirrors are not verified to be ok and may be outdated or flapping.
Failure mode is that if a mirror with a specified network data match for clients goes down, when the clients slide down the list to subsequent mirrors, this list of additional mirrors is not filtered for private mirrors or only healthy mirrors.
Because of a server migration, our IPs will change for mirror.mijn.host.
178.162.180.129
2001:1af8:8100:a005:5::2
Currently we cannot rsync from this IPs. Can you add these IPs please?
I've noticed that older versions of Almalinux are no longer available from all mirrors. This causes issues with tools such as Netboot and prevents installations from using these versions.
These versions should at least be available for 12-24 months.
Something similar to /mirrorlist
but that will only return the base URL of the closest mirror. Perhaps we could simply add a route for /mirrorlist/<version>
to serve this list of base URLs.
This would allow a quality of life improvement in https://github.com/AlmaLinux/cloud-images so that it can fetch ISOs from a better mirror than the currently hard-coded repo.almalinux.org
.
This can probably be used in other automated processes and projects as well.
Other distros uses to remove the old version when a new one comes off. For example it 8.4/ is liberated, we suggest to empty 8.3/ 8.3-rc/ 8.3-beta/ and so on.
Our mirrors are growing too fast by keeping old versions present in the mirrors. I suggest to create, for example, a vault.almalinux.org in order to store old versions and not hit the mirrors HD usage too hard.
I found that you declared taiwan is a country in your mirror list site in this website: https://mirrors.almalinux.org/
我发现您在此网站 https://mirrors.almalinux.org/ 的镜像列表网站中宣称**是一个国家/地区。
However, Taiwan is not a country, but a part of the PRC (People's Republic of China).
然而,**并不是一个国家/地区,而是中华人民共和国的一部分。
Please correct the attribution of Taiwan in the mirror list. You can just write "China(Taiwan)". Thanks!
请您将镜像列表中**的归属进行修正。您可以直接写“**(**)”。谢谢!
Hi Alma Team,
for the 9.0 Version - is there may any Chance you provide also an io_uring supported Kernel. the Default one seems not beeing compiled with it.
thx
We're quite a few versions out of date now.
Hi,
it looks like your mirror website is broken: mirrors.almalinux.org
$dig mirrors.almalinux.org
; <<>> DiG 9.10.6 <<>> mirrors.almalinux.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21080
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;mirrors.almalinux.org. IN A
;; AUTHORITY SECTION:
almalinux.org. 3600 IN SOA arvind.ns.cloudflare.com. dns.cloudflare.com. 2037974018 10000 2400 604800 3600
;; Query time: 19 msec
;; SERVER: 192.168.100.12#53(192.168.100.12)
;; WHEN: Wed Aug 04 12:50:03 CEST 2021
;; MSG SIZE rcvd: 114
Looks like you removed the A-Record ... Your documentation still points to the URL: https://wiki.almalinux.org/Mirrors.html
Regards,
Kilian
I've been all over the code, and I can't find a route inside mirror listing code (on the mirrors_service branch) that will let me filter the results by protocol.
I would like to update the DNF repo config mirrorlist URL so it only retrieves and uses HTTPS capable mirrors.
With the Fedora mirror service, it's possible to filter the results by appending &protocol=https
to the mirrorlist URL. For example, to get a list of HTTPS mirrors for the EPEL repo, you could use:
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir&protocol=https
Or to get a list HTTPS mirrors for the Fedora 36 repo:
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch&protocol=https
aioredis has officially been taken up by the official redis library.
Same issue as here https://access.redhat.com/discussions/4524081
It looks like when the crypto policy is to FUTURE we are unable to connect to the Alma Linux repos with the following error:
Error: Error downloading packages:
Curl error (60): Peer certificate cannot be authenticated with given CA certificates for https://mirrors.almalinux.org/mirrorlist/8/baseos [SSL certificate problem: EE certificate key too weak]
LiteServer their mirror also has a FTP mirror, the FTP location is:
ftp://mirror.liteserver.nl/almalinux
Thanks for adding it!
[Maybe I could use better search terms, but I was unable to find an answer to this, which became a problem with the automatic geo-based mirror choice.]
Unfortunately my closest fast mirror does not support HTTPS and so I'd prefer not to use it. As a result updates frequently come up with things like this: [MIRROR] kernel-4.18.0-305.12.1.el8_4.x86_64.rpm: Curl error (7): Couldn't connect to server for https://almalinux-mirror.datakeepers.co.za/8/BaseOS/x86_64/os/Packages/kernel-4.18.0-305.12.1.el8_4.x86_64.rpm [Failed to connect to almalinux-mirror.datakeepers.co.za port 443: Connection refused]
How can I only resolve HTTPS-capable sites or is there a way to set up blacklists?
Both would have their uses but in this case the former would be best.
Dear Admin,
I have noticed that our mirror at https://mirror.amscloud.co.id/almalinux is listed as expired. I'm unable to sync with the follow ing error message:
@error: max connections (101) reached -- try again later
rsync error: error starting client-server protocol (code 5) at main.c(1675) [Receiver=3.1.3]
Step to reproduce this issue:
Thank you
$ rsync rsync://rsync.ftp.yz.yamagata-u.ac.jp/pub/linux/almalinux/
rsync: getaddrinfo: rsync.ftp.yz.yamagata-u.ac.jp 873: Name or service not known
rsync error: error in socket IO (code 10) at clientserver.c(137) [Receiver=3.2.3]
The service uses aiohttp
for checking availability a mirror and linux-mirrors.fnal.gov
is not available through async client. We get timeout exception.
Hello,
We noticed that our mirror is no longer in the mirror list at https://mirrors.almalinux.org/
I can see the yaml file in the repo: https://github.com/AlmaLinux/mirrors/blob/master/mirrors.d/mirror.nl.fusioned.net.yml
Is there a difference in creating a mirror file, yaml or yml?
timestamps for both are up to date.
Hello,
Our mirror (https://mirror.mijn.host) was down because of infrastructure change.
Now the mirror is working again, and will stay working.
Can you re-add our mirror? The mirror file is already in the mirrors.d directory (9ec6628).
while trying to sync almalinux we are getting:
@error: max connections (30) reached -- try again later
rsync error: error starting client-server protocol (code 5) at main.c(1657) [Receiver=3.1.3]
https://github.com/AlmaLinux/mirrors/blob/mirrors_service/src/backend/api/handlers.py#L73
When a client matches the network data service cone for any mirror, the offered mirror list is built using the following logic:
The issue is that this process is completely deterministic and there is no load balancing for clients that match on any mirror's network service cone. There is no shuffling happening in either the first list of suitable_mirrors or the geographically based extension of the list to meet the minimum number of mirrors to offer.
Failure modes:
Recommendation:
2 * LENGTH_CLOUD_MIRRORS_LIST
closest mirrors, shuffle this list, then suitable_mirrors.extend(nearby_mirrors_shuffled)[:LENGTH_CLOUD_MIRRORS_LIST - len(suitable_mirrors)]
I see that even though timestamps are updated, the mirrors are showing up as expired since more than 72 hours.
This seems to affect both the Netherlands https://mirror.nl.fusioned.net and Greece https://mirror.ath1.fusioned.net mirrors.
cc: @alex1x
cc: @georgetasioulis
Is there an option to fill in the variables that the mirrorlist returns? We have Spacewalk running and the mirrorlist returns a list of URL's that have the variable $basearch
in them. Spacewalk can't resolve or change that variable.
It would be nice to have the option to generate that URL without those variables so it returns static URL's.
The URL https://mirrors.almalinux.org/mirrorlist/8/baseos returns the following:
http://mirror.nl.altushost.com/almalinux/8/BaseOS/$basearch/os/
http://mirror.nforce.com/pub/linux/almalinux/8/BaseOS/$basearch/os/
http://mirror.previder.nl/almalinux/8/BaseOS/$basearch/os/
http://mirrors.evoluso.com/almalinux/8/BaseOS/$basearch/os/
http://mirror.wd6.net/almalinux/8/BaseOS/$basearch/os/
http://almalinux.mirror.wearetriple.com/8/BaseOS/$basearch/os/
http://mirror.mijn.host/almalinux/8/BaseOS/$basearch/os/
http://mirrors.mvps.net/almalinux/8/BaseOS/$basearch/os/
http://almalinux.mirror.liteserver.nl/8/BaseOS/$basearch/os/
http://mirror.almalinux.ams01.readydedis.com/almalinux/8/BaseOS/$basearch/os/
Adding a parameter to the URL will fill in those variables, simething like <url>?basearch=x86_64
The following URL would return the below URL's: https://mirrors.almalinux.org/mirrorlist/8/baseos?basearch=x86_64
http://mirror.nl.altushost.com/almalinux/8/BaseOS/x86_64/os/
http://mirror.nforce.com/pub/linux/almalinux/8/BaseOS/x86_64/os/
http://mirror.previder.nl/almalinux/8/BaseOS/x86_64/os/
http://mirrors.evoluso.com/almalinux/8/BaseOS/x86_64/os/
http://mirror.wd6.net/almalinux/8/BaseOS/x86_64/os/
http://almalinux.mirror.wearetriple.com/8/BaseOS/x86_64/os/
http://mirror.mijn.host/almalinux/8/BaseOS/x86_64/os/
http://mirrors.mvps.net/almalinux/8/BaseOS/x86_64/os/
http://almalinux.mirror.liteserver.nl/8/BaseOS/x86_64/os/
http://mirror.almalinux.ams01.readydedis.com/almalinux/8/BaseOS/x86_64/os/
We should validate the content of repomd.xml
files. These files are integral to a working mirror system even if other packages are out of date, missing, etc. the proper repomd.xml
file will at least let dnf
fall back to a working mirror.
Last night we had an instance of a mirror having an incorrect repomd.xml
file resulting in a user not being able to update. We could've easily prevented this situation if we validated all repomd.xml
files on a given mirror before considering it as healthy/online.
Marking this as a bug since in the current state non-working mirrors can be marked as OK rendering dnf
transactions impossible without user intervention.
The country on https://mirrors.almalinux.org/ for mirror.alwyzon.net incorrectly shows Romania instead of Austria. I guess this is based on a GeoIP database? Any chance the used database copy needs an update? The IPs were used by an Romanian ISPs a while ago, but the RIPE database entries and all major GeoIP databases (MaxMind, ipinfo.io, ...) should all correctly show Austria.
When using private mirrors, I really only want the mirrorlist query to return my private mirrors.
It could very well be that my machines can only reach my mirrors.
Even if my machines can reach public mirrors, if my mirrors are broken, I want dnf to break and tell me that the mirror is broken rather than doing an end-run around it and using public mirrors.
Perhaps this functionality should be optional/selectable.
At least one of the Azure mirrors listed on the downloads page is currently down (for both x86_64 and aarch64): http://eastus.azure.repo.almalinux.org/almalinux/8.4/isos/x86_64
Hello,
Our mirror (https://mirror.mijn.host) disappeared from the mirror list. I've no idea why.
Can you re-add our mirror? The mirror file is already in the mirrors.d directory (9ec6628).
Thanks.
Hello,
mirror 'almalinux.ourhome.kiwi' has location United-States, but it is located in New Zealand.
Please amend.
Thank you.
When I request the mirror list over IPv4, the mirror service works as expected and returns a total of 9 mirrors.
Over IPv6 the service always returns the full list.
Both my IPv4 and IPv6 address are resolved to the correct country when tested with the Maxmind demo.
The service should be able to detect the correct country based on my IPv6 address utilizing the Maxmind database, so something else is causing the mirror service to fall back to returning the complete list.
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.