microsoft / aroworkshop Goto Github PK
View Code? Open in Web Editor NEWAzure Red Hat OpenShift workshop
License: Creative Commons Attribution 4.0 International
Azure Red Hat OpenShift workshop
License: Creative Commons Attribution 4.0 International
Need to have them record the cluster name and resource group name from when they created the project.
I had to look at the entire commend history to go back and find them.
I followed the prereqs and ran this command:
$ helm upgrade --install --devel aso2 aso2/azure-service-operator \
--create-namespace
--namespace=azureserviceoperator-system
--set azureSubscriptionID=$AZURE_SUBSCRIPTION_ID
--set azureTenantID=$AZ_TENANT_ID
--set azureClientID=$SERVICE_PRINCIPAL_CLIENT_ID
--set azureClientSecret=$SERVICE_PRINCIPAL_CLIENT_SECRET
Release "aso2" does not exist. Installing it now.
W0326 14:14:00.121563 6102 warnings.go:70] would violate PodSecurity "restricted:v1.24": unrestricted capabilities (containers "manager", "kube-rbac-proxy" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or containers "manager", "kube-rbac-proxy" must set securityContext.runAsNonRoot=true), seccompProfile (pod or containers "manager", "kube-rbac-proxy" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
NAME: aso2
LAST DEPLOYED: Tue Mar 26 14:13:55 2024
NAMESPACE: azureserviceoperator-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
I get this error message in the logs of the azureserviceoperator-controller-manager:
I0326 19:15:09.669459 1 manager.go:171] "msg"="Goal CRDs" "count"=199 "logger"="controllers"
I0326 19:15:09.669497 1 manager.go:172] "msg"="Existing CRDs" "count"=0 "logger"="controllers"
E0326 19:15:09.669914 1 setup.go:188] "msg"="failed to apply CRDs" "error"="No existing CRDs in cluster and no --crd-pattern specified" "logger"="setup"
could you please add info how to scale worker nodes?
any special consideration?
I hit an issue where Eclipse CHE was not getting deployed. On reviewing https://github.com/nichochen/openshift-cd-demo I noticed there is a pull request to fix an issue. Check nichochen/openshift-cd-demo#2
I cloned this repo, and made that local change - and then deployed using the manual deploy steps defined in this repo. Che worked fine with this
The ratings-api
, which is deployed in step 2.4 exposes port 3000
. The service, that gets created by the following command exposes port 8080
.
oc new-app https://github.com/<your GitHub username>/rating-api --strategy=source
This leads to misconfiguration and the web frontend can't find the api. The port exposed by the ratings-api
service has to be changed from 8080
to 3000
manually.
Ratings API container exposes port 3000 not 8080 Since those PR :
The ARO workshop guidance should state this and provide a CLI snippet 'oc new-app ....' to get the Service configured with
ports:
- name: 80-3000-tcp
protocol: TCP
port: 8080
targetPort: 3000
I have read the OC CLI docs but not found anything, how to do so ?
shouldn't the Note states :
You’re going to be using Docker as a build strategy ?
Path needs to be absolute for loading tata:
Run the mongoimport command to import the JSON data files into the database. Make sure the username, password and database name match what you specified when you deployed the template.
mongoimport --host 127.0.0.1 --username ratingsuser --password ratingspassword --db ratingsdb --collection items --type json --file data/items.json --jsonArray
mongoimport --host 127.0.0.1 --username ratingsuser --password ratingspassword --db ratingsdb --collection sites --type json --file data/sites.json --jsonArray
mongoimport --host 127.0.0.1 --username ratingsuser --password ratingspassword --db ratingsdb --collection ratings --type json --file data/ratings.json --jsonArray
Go to the https://github.com//rating-web/blob/master/src/App.vue file in your repository on GitHub.
=> it should be https://github.com//rating-web/blob/master/src/App.vue
The initial run of the "tasks-pipeline" pipeline fails on the "Build Image" step.
Error from Jenkins for Stage "Build Image":
ERROR: Error running start-build on at least one item: [buildconfig/tasks];
{reference={}, err=Uploading file "target/ROOT.war" as binary input for the build ...
Error from server (InternalError): Internal error occurred: pods "tasks-1-build" is forbidden: cannot exec into or attach to a privileged container, verb=start-build, cmd=oc --server=https://172.30.0.1:443 --certificate-authority=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt --namespace=dev-aro --token=XXXXX start-build buildconfig/tasks --from-file=target/ROOT.war --wait=true -o=name , out=, status=1}
Jenkins log with additional context:
...snip...
[Pipeline] stage
[Pipeline] { (Build Image)
[Pipeline] sh
+ cp target/openshift-tasks.war target/ROOT.war
[Pipeline] script
[Pipeline] {
[Pipeline] echo
[Pipeline] _OcContextInit
[Pipeline] _OcContextInit
[Pipeline] readFile
[Pipeline] _OcAction
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy DEV)
Stage "Deploy DEV" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Promote to STAGE?)
Stage "Promote to STAGE?" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy STAGE)
Stage "Deploy STAGE" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: Error running start-build on at least one item: [buildconfig/tasks];
{reference={}, err=Uploading file "target/ROOT.war" as binary input for the build ...
Error from server (InternalError): Internal error occurred: pods "tasks-1-build" is forbidden: cannot exec into or attach to a privileged container
, verb=start-build, cmd=oc --server=https://172.30.0.1:443 --certificate-authority=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt --namespace=dev-aro --token=XXXXX start-build buildconfig/tasks --from-file=target/ROOT.war --wait=true -o=name , out=, status=1}
Finished: FAILURE
The URI information is not easy to work out.
You should refer explicitly to step 2.3 and Retrieve Mongo DB Hostname.
Also make a point of getting them to write all that down in a notepad or something..
I am not sure of the point of this whole section. What you click on and what you see don't match, and there is no outcome in terms of the lab.
Configuration using ConfigMaps
The UI does not display the entire configMap as the steps suggest. All you get is the data
Secrets
The UI does not display the secret as per the steps elude.
Configuration using Environment Variables
The UI does not match the contents - and some of the environment variables are not even there. E.g. ENV_TOY_CONFIGMAP
Using https://github.com/siamaksade/openshift-cd-demo as an inspiration
If you follow the steps then this will trick new people. It reads like you get the logs form the deployment itself. I think you need to clarify the step that you get to the logs by clicking on the Pod from within the Deployment
In Exercise “Deploy the CI\CD Demo” (https://github.com/microsoft/aroworkshop/blob/master/_entries/04-02%20deploy_cicd_demo.md#deploy-the-demo ), che pod is not getting deployed.
When I ran “oc get pod”, Che pod was missing. As a result I was not able to run Cloud Native IDE exercise. (https://github.com/microsoft/aroworkshop/blob/master/_entries/04-04%20cloud_native_ide.md) .
Please find the output log below :
odl_user@Azure:~$ ./cicd/scripts/provision.sh deploy --enable-che --ephemeral --project-suffix aro
###############################################################################
MAKE SURE YOU ARE LOGGED IN:
$ oc login http://console.your.openshift.com
###############################################################################
WARN: Unknown option (ignored): --enable-che
########################################################################
OpenShift CI/CD Demo (Thu Aug 20 19:59:48 UTC 2020)
########################################################################
Deploying demo...
Now using project "dev-aro" on server "https://api.ks0z7mzg.centralus.aroapp.io:6443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app ruby~https://github.com/sclorg/ruby-ex.git
to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
Now using project "stage-aro" on server "https://api.ks0z7mzg.centralus.aroapp.io:6443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app ruby~https://github.com/sclorg/ruby-ex.git
to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
Now using project "cicd-aro" on server "https://api.ks0z7mzg.centralus.aroapp.io:6443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app ruby~https://github.com/sclorg/ruby-ex.git
to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
Warning: Group 'system:serviceaccounts:cicd-aro' not found
clusterrole.rbac.authorization.k8s.io/edit added: "system:serviceaccounts:cicd-aro"
Warning: Group 'system:serviceaccounts:cicd-aro' not found
clusterrole.rbac.authorization.k8s.io/edit added: "system:serviceaccounts:cicd-aro"
--> Deploying template "openshift/jenkins-ephemeral" to project cicd-aro
Jenkins (Ephemeral)
---------
Jenkins service, without persistent storage.
WARNING: Any data stored will be lost upon pod destruction. Only use this template for testing.
A Jenkins service has been created in your project. Log into Jenkins with your OpenShift account. The tutorial at https://github.com/openshift/origin/blob/master/examples/jenkins/README.md contains more information about using this template.
With parameters:
* Jenkins Service Name=jenkins
* Jenkins JNLP Service Name=jenkins-jnlp
* Enable OAuth in Jenkins=true
* Memory Limit=1Gi
* Jenkins ImageStream Namespace=openshift
* Disable memory intensive administrative monitors=false
* Jenkins ImageStreamTag=jenkins:2
* Allows use of Jenkins Update Center repository with invalid SSL certificate=false
--> Creating resources ...
route.route.openshift.io "jenkins" created
deploymentconfig.apps.openshift.io "jenkins" created
serviceaccount "jenkins" created
rolebinding.authorization.openshift.io "jenkins_edit" created
service "jenkins-jnlp" created
service "jenkins" created
--> Success
Access your application via route 'jenkins-cicd-aro.apps.ks0z7mzg.centralus.aroapp.io'
Run 'oc status' to view your app.
Using template https://raw.githubusercontent.com/siamaksade/openshift-cd-demo/ocp-4.3/cicd-template.yaml
--> Deploying template "cicd-aro/cicd" for "https://raw.githubusercontent.com/siamaksade/openshift-cd-demo/ocp-4.3/cicd-template.yaml" to project cicd-aro
cicd
---------
Use the following credentials for login:
Jenkins: use your OpenShift credentials
Nexus: admin/admin123
SonarQube: admin/admin
Gogs Git Server: gogs/gogs
With parameters:
* DEV project name=dev-aro
* STAGE project name=stage-aro
* Ephemeral=false
* WEBHOOK_SECRET=EgfCYckk # generated
* Integrate Quay.io=false
* Quay.io Username=
* Quay.io Password=
* Quay.io Image Repository=tasks-app
--> Creating resources ...
rolebinding.authorization.openshift.io "default_admin" created
buildconfig.build.openshift.io "tasks-pipeline" created
configmap "jenkins-slaves" created
job.batch "cicd-demo-installer" created
--> Success
JenkinsPipeline build strategy is deprecated. Use Jenkinsfiles directly on Jenkins or OpenShift Pipelines instead
Use 'oc start-build tasks-pipeline' to start a build.
Run 'oc status' to view your app.
Provisioning completed successfully!
(Completed in 0 min 24 sec)
odl_user@Azure:~$ oc get pod -n cicd-aro
NAME READY STATUS RESTARTS AGE
cicd-demo-installer-96t5s 0/1 Completed 0 7m8s
gogs-1-deploy 0/1 Completed 0 6m45s
gogs-1-qbfwb 1/1 Running 0 6m42s
gogs-postgresql-1-deploy 0/1 Completed 0 6m45s
gogs-postgresql-1-n5jsb 1/1 Running 0 6m42s
jenkins-2-deploy 0/1 Completed 0 6m34s
jenkins-2-nm2v4 1/1 Running 0 6m30s
nexus-1-b79kg 1/1 Running 0 6m35s
nexus-1-deploy 0/1 Completed 0 6m38s
nexus-1-hook-post 0/1 Completed 0 2m47s
sonardb-2-deploy 0/1 Completed 0 6m38s
sonardb-2-plqf4 1/1 Running 0 6m35s
sonarqube-1-deploy 0/1 Completed 0 6m39s
sonarqube-1-ghx8f 1/1 Running 0 6m36s
I believe Lab 3 needs an update as the provision.sh script from the Github repo no longer installs CHE, which I believe is needed to be done in the OperatorHub instead.
Also the Monitor the pipeline section has a screenshot from ARO3 (the old version of the ARO service). Should update with a screenshot from ARO4.
What happened:
Build failed with permission error when running "make build-run". Added --trace to the build option in the Dockerfile to display the error. Full transcript:
[bryon@Bryons-MacBook-Pro aroworkshop]$ make build-run
docker build -t azch/aro-site:latest -f Dockerfile .
Sending build context to Docker daemon 45.82MB
Step 1/8 : FROM jekyll/builder AS build
---> d92f7574c8c5
Step 2/8 : WORKDIR /src/app
---> Using cache
---> 4aaca41da8f0
Step 3/8 : COPY . .
---> 39235f15f555
Step 4/8 : RUN mkdir _site && jekyll build --future --trace
---> Running in ecdaa9570df0
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux-musl]
Configuration file: /src/app/_config.yml
/usr/local/lib/ruby/2.6.0/fileutils.rb:239:in `mkdir': Permission denied @ dir_s_mkdir - /src/app/.jekyll-cache (Errno::EACCES)
from /usr/local/lib/ruby/2.6.0/fileutils.rb:239:in `fu_mkdir'
from /usr/local/lib/ruby/2.6.0/fileutils.rb:217:in `block (2 levels) in mkdir_p'
from /usr/local/lib/ruby/2.6.0/fileutils.rb:215:in `reverse_each'
from /usr/local/lib/ruby/2.6.0/fileutils.rb:215:in `block in mkdir_p'
from /usr/local/lib/ruby/2.6.0/fileutils.rb:200:in `each'
from /usr/local/lib/ruby/2.6.0/fileutils.rb:200:in `mkdir_p'
from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/cache.rb:184:in `dump'
from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/cache.rb:101:in `[]='
from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/cache.rb:45:in `clear_if_config_changed'
from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/site.rb:113:in `reset'
from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/site.rb:33:in `initialize'
from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/commands/build.rb:30:in `new'
from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/commands/build.rb:30:in `process'
from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/command.rb:89:in `block in process_with_graceful_fail'
from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/command.rb:89:in `each'
from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/command.rb:89:in `process_with_graceful_fail'
from /usr/gem/gems/jekyll-4.0.0/lib/jekyll/commands/build.rb:18:in `block (2 levels) in init_with_program'
from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `block in execute'
from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `each'
from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `execute'
from /usr/gem/gems/mercenary-0.3.6/lib/mercenary/program.rb:42:in `go'
from /usr/gem/gems/mercenary-0.3.6/lib/mercenary.rb:19:in `program'
from /usr/gem/gems/jekyll-4.0.0/exe/jekyll:15:in `<top (required)>'
from /usr/gem/bin/jekyll:23:in `load'
from /usr/gem/bin/jekyll:23:in `<main>'
The command '/bin/sh -c mkdir _site && jekyll build --future --trace' returned a non-zero code: 1
What you expected to happen:
Build should have completed without error
How to reproduce it (as minimally and precisely as possible):
Clone the aroworkshop repo
run make build-run
Anything else we need to know?:
Environment:
At the start of the CICO lab, I'm seeing the following after running:
./cicd/scripts/provision.sh deploy --enable-che --ephemeral --project-suffix aro
# oc get po -w
NAME READY STATUS RESTARTS AGE
che-5694c4c564-sg5kw 0/1 ContainerCreating 0 3m
cicd-demo-installer-44g4k 0/1 Error 0 5m
cicd-demo-installer-g6cnv 0/1 Error 0 4m
cicd-demo-installer-vhqj9 0/1 ContainerCreating 0 4s
gogs-1-cd2jx 1/1 Running 0 3m
gogs-postgresql-1-8gsbh 1/1 Running 0 3m
jenkins-2-692gx 0/1 Running 3 4m
jenkins-2-deploy 1/1 Running 0 4m
nexus-1-8lv27 1/1 Running 0 2m
sonardb-1-hfbnx 1/1 Running 0 2m
sonarqube-1-nqw8j 1/1 Running 0 2m
jenkins-2-692gx 0/1 Error 3 4m
cicd-demo-installer-vhqj9 1/1 Running 0 6s
jenkins-2-692gx 0/1 CrashLoopBackOff 3 4m
jenkins-2-692gx 0/1 Running 4 5m
jenkins-2-692gx 0/1 Error 4 5m
cicd-demo-installer-vhqj9 0/1 Error 0 55s
jenkins-2-692gx 0/1 CrashLoopBackOff 4 5m
odl_user@Azure:~$ oc logs jenkins-2-692gx
OpenShift client and server versions are oc v3.11.146
kubernetes v1.11.0+d4cacc0
features: Basic-Auth GSSAPI Kerberos SPNEGO
Server https://172.30.0.1:443
openshift v3.11.129
kubernetes v1.11.0+d4cacc0
alternatives version 1.7.4 - Copyright (C) 2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License.
usage: alternatives --install <link> <name> <path> <priority>
[--initscript <service>]
[--family <family>]
[--slave <link> <name> <path>]*
alternatives --remove <name> <path>
alternatives --auto <name>
alternatives --config <name>
alternatives --display <name>
alternatives --set <name> <path>
alternatives --list
common options: --verbose --test --help --usage --version --keep-missing
--altdir <directory> --admindir <directory>
OPENSHIFT_JENKINS_JVM_ARCH='', CONTAINER_MEMORY_IN_MB='2048', using /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64/jre/bin/java and /usr/lib/jvm/java-11-openjdk-11.0.4.11-1.el7_7.x86_64/bin/javac
/usr/local/bin/jenkins-common.sh: line 33: java: command not found
mkdir: cannot create directory ‘/var/lib/jenkins/logs’: File exists
Administrative monitors that contact the update center will remain active
Detected password environment variable change, updating Jenkins configuration ...
config.xml
Migrating slave image configuration to current version tag ...
+ exec java -XX:+UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Xmx1024m -Dfile.encoding=UTF8 -Djavamelody.displayed-counters=log,error -Duser.home=/var/lib/jenkins -Djavamelody.application-name=JENKINS -jar /usr/lib/jenkins/jenkins.war
/usr/libexec/s2i/run: line 485: exec: java: not found
Is section 3.5 Persistent Storage, there are two incorrect references to the directory that is on the PVC:
It says:
"If you remember we mounted the directory /var/demo-files
to our PVC."
but should be:
"If you remember we mounted the directory /var/demo_files
to our PVC."
It says:
then cd /var/demo-files
but should be:
then cd /var/demo_files
There are important files that Microsoft projects should all have that are not present in this repository. A pull request has been opened to add the missing file(s). When the pr is merged this issue will be closed automatically.
Microsoft teams can learn more about this effort and share feedback within the open source guidance available internally.
I followed exact steps in tutorial, but no Pod created for MongoDB, only service and deployment config created.
Can you help?
C:\Users\sid>oc get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mongodb ClusterIP 172.30.244.245 27017/TCP 66s
NAME REVISION DESIRED CURRENT TRIGGERED BY
deploymentconfig.apps.openshift.io/mongodb 0 1 0 config,image(mongodb:3.6)
Lab 1 /§2.2
az openshift create ...
with ARO 4.3 should be :
az aro create
--name $cluster_name
--vnet $vnet_name
--master-subnet $master_subnet_id
--worker-subnet $worker_subnet_id
--apiserver-visibility $apiserver_visibility
--ingress-visibility $ingress_visibility
--location $location
--pod-cidr $pod_cidr
--service-cidr $svc_cidr
--pull-secret @pull-secret.txt
--worker-count 3
--resource-group $rg_name
In Lab1 Task 2.3 while creating project facing an issue with the cli version.
As we are using cli version 2.5.1 in cloud shell.
Error message is :
Operation failed with status: 'Not Found'. Details: "{\"error\":{\"code\":\"InvalidResourceType\",\"message\":\"The resource type 'openShiftManagedClusters' could not be found in the namespace 'Microsoft.ContainerService' for api version '2019-10-27-preview'. The supported api-versions are '2019-04-30,2019-09-30-preview'.\"}}
when the vue based container runs, I got a bunch of errors around a mismatch with versions of vue (forget exact message but similar to https://stackoverflow.com/questions/55906997/vue-packages-version-mismatch)
Fixed it by setting
"vue": "2.6.10"
and
"vue-template-compiler": "2.6.10",
in package.json
While setting the Environment variable it is giving the below mentioned error (https://github.com/microsoft/aroworkshop/blob/master/_entries/02-05%20web.md#configure-the-required-environment-variables ).
I'm sure this is coming soon, but when will this lab actually be available on the self-service workshop site..
Elements that have scrollable content must be accessible by keyboard
(scrollable-region-focusable)
Azure Red Hat OpenShift Workshop
#mongodb > .collapsible-content-container:nth-child(3) > .collapsible-content > .language-sh.highlighter-rouge:nth-child(3) > .highlight > pre
<pre class="highlight"><code>oc create <span class="nt">-n</span> openshift <span class="nt">-f</span> https://raw.githubusercontent.com/openshift/origin/4ea9e6c5961eb815c200df933eee30c48a5c9166/examples/db-templates/mongodb-persistent-template.json </c...
Fix any of the following:
Element should have focusable content
Element should be focusable
Microsoft Edge version 100.0.1185.50
This accessibility issue was found using Accessibility Insights for Web 2.31.1 (axe-core 4.3.2), a tool that helps find and fix accessibility issues. Get more information & download this tool at http://aka.ms/AccessibilityInsights.
Couple of screenshots are still based on Azure RedHat Openshift 3.11 which makes confusions during the lab.
As per the documentation here: https://docs.microsoft.com/en-us/azure/openshift/howto-deploy-prometheus
This will entail modifying the ratings-api app to send Prometheus telemetry data to be able to see them.
ratings-api
ratings-web
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.