Code Monkey home page Code Monkey logo

sap-hana-preconfigure's Introduction

NOTE: Development and maintenance of this software has stopped.

The successor role is sap_hana_preconfigure.

For more information, see DISCONTINUATION_NOTICE.md.


sap-hana-preconfigure

This role installs additional required packages and performs additional configuration steps for installing and running SAP HANA. If you want to configure a RHEL system for the installation and later usage of SAP HANA, you have to first run role sap-preconfigure and then role sap-hana-preconfigure.

Requirements

To use this role, your system needs to be configured with the basic requirements for SAP NetWeaver or SAP HANA. This is typically done by running role sap-preconfigure (for RHEL managed nodes before RHEL 7.6, community maintained role sap-base-settings can be used). It is also strongly recommended to run role linux-system-roles.timesync for all systems running SAP HANA, to maintain an identical system time, before or after running role sap-hana-preconfigure.

Managed nodes need to be properly registered to a repository source and have at least the following Red Hat repositories accessable (see also example playbook):

for RHEL 7.x:

  • rhel-7-[server|for-power-le]-e4s-rpms
  • rhel-sap-hana-for-rhel-7-[server|for-power-le]-e4s-rpms

for RHEL 8.x:

  • rhel-8-for-[x86_64|ppc64le]-baseos-e4s-rpms
  • rhel-8-for-[x86_64|ppc64le]-appstream-e4s-rpms
  • rhel-8-for-[x86_64|ppc64le]-sap-solutions-e4s-rpms

For details, see the Red Hat knowledge base article: How to subscribe SAP HANA systems to the Update Services for SAP Solutions). If you set role parameter sap_hana_preconfigure_enable_sap_hana_repos to yes, the role can enable these repos.

To install HANA on Red Hat Enterprise Linux 6, 7, or 8, you need some additional packages which are contained in the rhel-sap-hana-for-rhel-7-[server|for-power-le]-e4s-rpms or rhel-8-for-[x86_64|ppc64le]-sap-solutions-e4s-rpms repo.

To get this repository you need to have one of the following products:

To get a personal developer edition of RHEL for SAP solutions, please register as a developer and download the developer edition.

  • Registration Link : Here you can either register a new personal account or link it to an already existing personal Red Hat Network account.
  • Download Link: Here you can download the Installation DVD for RHEL with your previously registered account

NOTE: This is a regular RHEL installation DVD as RHEL for SAP Solutions is no additional product but only a special bundling. The subscription grants you access to the additional packages through our content delivery network (CDN) after installation.

For supported RHEL releases click here.

It is also important that your disks are setup according to the SAP storage requirements for SAP HANA. This BLOG is also quite helpful when sizing HANA systems. You can use the storage role to automate this process

If you want to use this system in production, make sure that the time service is configured correctly. You can use rhel-system-roles to automate this.

Note

For finding out which SAP notes will be used by this role, please check the contents of variable __sap_hana_preconfigure_sapnotes in files vars/*.yml (choose the file which matches your OS distribution and version).

Do not run this role against an SAP HANA or other production system. The role will enforce a certain configuration on the managed node(s), which might not be intended.

Changes

  1. Previous versions of this role used variable sap_hana_preconfigure_use_tuned_where_possible to switch between either tuned settings or kernel command line settings (where applicable). The current version modifies this behavior:
  • The variable sap_hana_preconfigure_use_tuned_where_possible has been renamed to sap_hana_preconfigure_use_tuned
  • The variable sap_hana_preconfigure_switch_to_tuned_profile_sap_hana has been removed.
  • If sap_hana_preconfigure_use_tuned is set to yes, which is also the default, the role will configure the system for using tuned and also switch to tuned profile sap-hana. If sap_hana_preconfigure_use_tuned is set to no, the role will perform a static configuration, including the modification of the linux command line in grub.
  • The role can use tuned, or configure the kernel command line, or both.
  1. Previous versions of this role used variable sap_hana_preconfigure_selinux_state to set the SELinux state to disabled, which is mentioned in SAP notes 2292690 (RHEL 7) and 2777782 (RHEL 8). As role sap-preconfigure already allows to specify the desired SELinux state, and as sap-preconfigure is run before sap-hana-preconfigure, there is no need any more to let sap-hana-preconfigure configure the SELinux state. Same applies to the assertion of the SELinux state. Because of this, variable sap_hana_preconfigure_selinux_state has been removed from this role and tasks 2292690/08-disable-selinux.yml and 2777782/01-assert-selinux.yml have been commented out.

Role Variables

  • set in defaults/main.yml:

Execute only certain steps of SAP notes

If the following variable is set to no, only certain steps of SAP notes will be executed or checked as per setting of variable sap_hana_preconfigure_<sap_note_number>_<step>. If this variable is undefined or set to yes, all installation and configuration steps of applicable SAP notes will be executed.

sap_hana_preconfigure_config_all

Perform installation or configuration steps, or both

If you have set sap_hana_preconfigure_config_all (see above) to no, you can limit the scope of the role to only execute the installation or the configuration steps. For this purpose, set one of the following variables, or both, to yes. The default for both is no.

sap_hana_preconfigure_installation
sap_hana_preconfigure_configuration

Define configuration steps of SAP notes

For defining one or more configuration steps of SAP notes to be executed or checked only, set variable sap_hana_preconfigure_config_all to no, sap_hana_preconfigure_configuration to yes, and one or more of the following variables to yes:

sap_hana_preconfigure_2777782_[02...10], example: sap_hana_preconfigure_2777782_05
sap_hana_preconfigure_2292690_[01...07,09,10], example: sap_hana_preconfigure_2292690_02
sap_hana_preconfigure_2009879_3_9
sap_hana_preconfigure_2009879_3_14_[1...4]
sap_hana_preconfigure_2009879_3_15
sap_hana_preconfigure_2382421
sap_hana_preconfigure_3024346

Run the role in assert mode

If the following variable is set to yes, the role will only check if the configuration of the managed node(s) is according to the applicable SAP notes. Default is no.

sap_hana_preconfigure_assert

Behavior of the role in assert mode

If the role is run in assert mode (see above) and the following variable is set to yes, assertion errors will not cause the role to fail. This can be useful for creating reports. Default is no, meaning that the role will fail for any assertion error which is discovered. This variable has no meaning if the role is not run in assert mode.

sap_hana_preconfigure_assert_ignore_errors

Perform all configuration checks in assert mode

If the following variable is set to yes, if the role is configured with variable sap_hana_preconfigure_assert being set to yes, the role will check all configuration steps no matter of the setting of the tuned and grub variables. Default is no, meaning that only those configuration steps are checked which are enabled by the tuned and grub variables. Example: If variable sap_hana_preconfigure_modify_grub_cmdline_linux is set to no, when running the role in assert mode, the role will not check if the grub command line has been modified according to this role.

sap_hana_preconfigure_assert_all_config

Perform a RHEL minor release check for SAP HANA

If the following variable is set to no, the role will install packages and modify settings on the managed node even if the RHEL release is not contained in the list of supported RHEL releases. Default is yes. In assert mode (sap_hana_preconfigure_assert = yes), the role will always perform the RHEL release check but will display display "WARN" or "INFO" if the variable is set to no, instead of the default "FAIL" or "PASS".

sap_hana_preconfigure_min_rhel_release_check

Override the supported RHEL minor release list for SAP HANA

If you want to provide you own list of supported RHEL releases (e.g. for testing), override the variable. Otherwise, the defaults as set in vars/RedHat_*.yml will be used.

sap_hana_preconfigure_supported_rhel_minor_releases

Repo checking and enabling

If you want the role to check and if necessary enable SAP HANA repos, set the following variable to yes. Default is no.

sap_hana_preconfigure_enable_sap_hana_repos

Override default repo list(s)

If you want to provide you own list(s) of repositories for checking and enabling, override one or more of the following variables. Otherwise, the defaults as set in vars/RedHat_*.yml will be used.

sap_hana_preconfigure_req_repos_RedHat_7_x86_64
sap_hana_preconfigure_req_repos_RedHat_7_ppc64le
sap_hana_preconfigure_req_repos_RedHat_8_x86_64
sap_hana_preconfigure_req_repos_RedHat_8_ppc64le

Set the RHEL release to a certain fixed minor release

If you want the role to set the RHEL release to a certain fixed minor release (according to installed RHEL release), set the following variable to yes. Default is no.

sap_hana_preconfigure_set_minor_release

Minimum package check

The following variable will make sure packages are installed at minimum required versions as defined in files vars/*.yml. Default is yes.

sap_hana_preconfigure_min_package_check

Perform a yum update

If the following variable is set to yes, the role will run a yum update before performing configuration changes. Default is no.
Note: The outcome of a yum update depends on the managed node's configuration for sticky OS minor version, see the description of the release option in man subscription-manager. For SAP HANA installations, setting a certain minor version with subscription-manager release --set=X.Y is a strict requirement.

sap_hana_preconfigure_update

HANA kernel parameters

SAP Note 238241 defines kernel parameters that all Linux systems need to set. The default parameter recomendations are dependent on the OS release. Hence the OS dependant default setting is defined in ./vars/{{ansible_os_release}}.yml. If you need to add or change parameters for your system, copy these parameters from the vars file into the variable sap_hana_preconfigure_kernel_parameters and add or change your settings, as in the following example:

sap_hana_preconfigure_kernel_parameters:
  - { name: net.core.somaxconn, value: 4096 }
  - { name: net.ipv4.tcp_max_syn_backlog, value: 8192 }
  - { name: net.ipv4.tcp_timestamps, value: 1 }
  - { name: net.ipv4.tcp_slow_start_after_idle, value: 0 }

HANA kernel parameters for IBM POWER servers

SAP Note 2055470 contains links to IBM documents for SAP HANA on POWER. Among these is a document which contains certain recommended Linux kernel settings for SAP HANA on POWER: Network_Configuration_for_HANA_Workloads_on_IBM_Power_Servers_V7.1.pdf. This document is linked from SAP note 2055470 via "SAP HANA on IBM Power Systems and IBM System Storage - Guides", then via "SAP on Linux and IBM Storage Guides (incl. HANA)", and then via "SAP on Power Linux Network and Fibre Channel Guides". The default parameter recommendations are defined in ./vars/{{ansible_os_release}}.yml. If you need to add or change parameters for your system, copy these parameters from the vars file into the variable sap_hana_preconfigure_kernel_parameters_ppc64le and add or change your settings, similar to the previous example.

HANA kernel parameters for NetApp NFS

SAP Note 3024346 defines kernel parameter settings for NetApp NFS. In case you want the role to set or check these parameters, set the following variable to yes. Default is no.

sap_hana_preconfigure_use_netapp_settings_nfs

###  HANA kernel parameters for NetApp NFSv3
[SAP Note 3024346](https://launchpad.support.sap.com/#/notes/3024346) also contains an additional parameter setting for NetApp when using NFSv3.
In case you want the role to set or check this parameter, set the following variable to `yes`. Default is `no`.

```yaml
sap_hana_preconfigure_use_netapp_settings_nfsv3

Add the repository for IBM service and productivity tools for POWER (ppc64le only)

In case you do not want to automatically add the repository for the IBM service and productivity tools, set the following variable to no. Default is yes, meaning that the role will download and install the package specified in variable sap_hana_preconfigure_ibm_power_repo_url (see below) and also run the command /opt/ibm/lop/configure to accept the license.

sap_hana_preconfigure_add_ibm_power_repo

URL for IBM service and productivity tools for POWER (ppc64le only)

The following variable is set to the location of package ibm-power-repo-lastest.noarch.rpm or a package with similar contents, as defined by variable __sap_hana_preconfigure_ibm_power_repo_url in vars/RedHat_7.yml and vars/RedHat_8.yml. You can replace it by your own URL by setting this variable to a different URL.

sap_hana_preconfigure_ibm_power_repo_url

Reboot the system if required

If the following variable is set to yes, the role will reboot the managed node if required. The default is no, in which case the role will only report that a reboot is required.

sap_hana_preconfigure_reboot_ok

How to behave if reboot is required

In case sap_hana_preconfigure_reboot_ok (see above) is set to no, we should make sure that a reboot requirement does not remain unnoticed. The following variable will cause the role to fail if a reboot is required, if undefined or set to yes, which is also the default. By setting the variable to no, the role will not fail if a reboot is required but just print a warning message.

sap_hana_preconfigure_fail_if_reboot_required

Use tuned profile sap-hana

By default, the role will activate tuned profile sap-hana for configuring kernel parameters (where possible). If you do not want to use the tuned profile sap-hana, set the following variable to no. In this case, the role will also modify GRUB_CMDLINE_LINUX, no matter how variable sap_hana_preconfigure_modify_grub_cmdline_linux (see below) is set. Note: If this variable is set to yes, the role may still modify GRUB_CMDLINE_LINUX in /etc/default/grub, by setting variable sap_hana_preconfigure_modify_grub_cmdline_linux to yes. This provides more flexibility for setting certain kernel parameters.

sap_hana_preconfigure_use_tuned

Modify grub2 line GRUB_CMDLINE_LINUX

If you want to modify the grub2 line GRUB_CMDLINE_LINUX in /etc/default/grub, set the following variable to yes. The default is no. Setting this variable to yes probably only makes sense if sap_hana_preconfigure_run_grub2_mkconfig (see below) is also set to yes. Note: If variable sap_hana_preconfigure_use_tuned (see above) is set to no, GRUB_CMDLINE_LINUX will modified in any case, no matter how variable sap_hana_preconfigure_modify_grub_cmdline_linux is set. This is to guarantee that either the tuned settings or the static settings will be applied. If variable sap_hana_preconfigure_use_tuned (see above) is set to yes, sap_hana_preconfigure_modify_grub_cmdline_linux can still be set to yes for modifying GRUB_CMDLINE_LINUX, providing more flexibility for setting certain kernel parameters.

sap_hana_preconfigure_modify_grub_cmdline_linux

Run grub2-mkconfig

If you do not want to run grub2-mkconfig to regenerate the grub2 config file after a change to /etc/default/grub (see the desciption of the two previous parameters), set the following variable to no. The default is yes.

sap_hana_preconfigure_run_grub2_mkconfig

HANA Major and minor version

These variables are used in all sap-hana roles so that they are only prefixed with sap-hana. If you use sap-hana-mediacheck role, these variables are read in automatically. The variable is used in the checks for SAP Note 2235581.

sap_hana_version: "2"
sap_hana_sps: "0"

Example Playbook

Simple playbook, named sap+hana.yml:

---
- hosts: all
  roles:
    - role: sap-preconfigure
    - role: sap-hana-preconfigure

Simple playbook for an extended check (assert) run, named sap+hana-assert.yml:

---
- hosts: all
  vars:
    sap_preconfigure_assert: yes
    sap_preconfigure_assert_ignore_errors: yes
    sap_hana_preconfigure_assert: yes
    sap_hana_preconfigure_assert_ignore_errors: yes
  roles:
    - role: sap-preconfigure
    - role: sap-hana-preconfigure

Example Usage

Normal run, for configuring server host_1 for SAP HANA:

ansible-playbook sap+hana.yml -l host_1

Extended Check (assert) run, not aborting if an error has been found:

ansible-playbook sap+hana-assert.yml -l host_1

Same as above, with a nice compact and colored output, this time for two hosts:

ansible-playbook sap+hana-assert.yml -l host_1,host_2 |
awk '{sub ("    \"msg\": ", "")}
  /TASK/{task_line=$0}
  /fatal:/{fatal_line=$0; nfatal[host]++}
  /...ignoring/{nfatal[host]--; if (nfatal[host]<0) nfatal[host]=0}
  /^[a-z]/&&/: \[/{gsub ("\\[", ""); gsub ("]", ""); gsub (":", ""); host=$2}
  /SAP note/{print "\033[30m[" host"] "$0}
  /FAIL:/{nfail[host]++; print "\033[31m[" host"] "$0}
  /WARN:/{nwarn[host]++; print "\033[33m[" host"] "$0}
  /PASS:/{npass[host]++; print "\033[32m[" host"] "$0}
  /INFO:/{print "\033[34m[" host"] "$0}
  /changed/&&/unreachable/{print "\033[30m[" host"] "$0}
  END{print ("---"); for (var in npass) {printf ("[%s] ", var); if (nfatal[var]>0) {
        printf ("\033[31mFATAL ERROR!!! Playbook might have been aborted!!!\033[30m Last TASK and fatal output:\n"); print task_line, fatal_line
     }
     else printf ("\033[31mFAIL: %d  \033[33mWARN: %d  \033[32mPASS: %d\033[30m\n", nfail[var], nwarn[var], npass[var])}}'

Note: For terminals with dark background, replace the color code 30m by 37m. In case you need to make an invisible font readable on a terminal with dark background, run the following command in the terminal:

printf "\033[37mreadable font\n"

In case you need to make an invisible font readable on a terminal with bright background, run the following command in the terminal:

printf "\033[30mreadable font\n"

Contribution

Please read the developer guidelines if you want to contribute

License

GNU General Public License v3.0

Author Information

Markus Koch, Thomas Bludau, Bernd Finger, Than Ngo

Please leave comments in the github repo issue list

sap-hana-preconfigure's People

Contributors

berndfinger avatar klaas- avatar makentenza avatar newkit avatar ngothan avatar rhmk avatar spetrosi avatar tbludau avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sap-hana-preconfigure's Issues

required for update and reboot

The test for updating is failing. rc is not defined:
See output:
TASK [sap-hana-preconfigure : restart machine if required] *********************

fatal: [dhcp168.coe.muc.redhat.com]: FAILED! => {"msg": "The conditional check 'sap_hana_preconfigure_reboot_after_update == true and sap_hana_preconfigure_register_reboot_required.rc == 1' failed. The error was: error while evaluating conditional (sap_hana_preconfigure_reboot_after_update == true and sap_hana_preconfigure_register_reboot_required.rc == 1): 'dict object' has no attribute 'rc'\n\nThe error appears to be in '/usr/share/ansible/roles/sap-hana-preconfigure/tasks/RedHat/installation.yml': line 85, column 9, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n # inspired by https://support.ansible.com/hc/en-us/articles/201958037-Reboot-a-server-and-wait-for-it-to-come-back\n - name: restart machine if required\n ^ here\n"}

...ignoring

TASK [sap-hana-preconfigure : waiting for server to come back] *****************

fatal: [dhcp168.coe.muc.redhat.com]: FAILED! => {"msg": "The conditional check 'sap_hana_preconfigure_reboot_after_update == true and sap_hana_preconfigure_register_reboot_required.rc == 1' failed. The error was: error while evaluating conditional (sap_hana_preconfigure_reboot_after_update == true and sap_hana_preconfigure_register_reboot_required.rc == 1): 'dict object' has no attribute 'rc'\n\nThe error appears to be in '/usr/share/ansible/roles/sap-hana-preconfigure/tasks/RedHat/installation.yml': line 92, column 9, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: waiting for server to come back\n ^ here\n"}

PLAY RECAP *********************************************************************
dhcp168.coe.muc.redhat.com : ok=11 changed=1 unreachable=0 failed=1 skipped=2 rescued=0 ignored=1
422 Client Error: Unprocessable Entity

Use ansible reboot module

As soon as you don't support ansible 2.6 anymore you can move to reboot module

- name: Reboot if required
block:
# Reboot the server now and wait until it is back
# inspired by https://support.ansible.com/hc/en-us/articles/201958037-Reboot-a-server-and-wait-for-it-to-come-back
- name: restart machine if required
shell: sleep 2 && shutdown -r now "Ansible updates triggered"
async: 1
poll: 0
become: true
ignore_errors: true
- name: waiting for server to come back
local_action: wait_for host={{ inventory_hostname }} port=22 state=started delay=90 sleep=2 timeout={{ sap_hana_preconfigure_reboot_timeout }}
become: false
when: sap_hana_preconfigure_reboot_after_update == true and sap_hana_preconfigure_register_reboot_required.rc == 1

would become:

- name: Reboot if required
  reboot:
    reboot_timeout: "{{ sap_hana_preconfigure_reboot_timeout }}"
  when: sap_hana_preconfigure_reboot_after_update == true and sap_hana_preconfigure_register_reboot_required.rc == 1

reboot fails on RHEL 8

the command needs-rebooting is not executed on RHEL 8, hence if you set the variable sap_hana_preconfigure_reboot_after_update == true
the playbook fails.
Required fix:

  • add yum-utils to the list of required packages (not installed by default)
  • change the when statement to ansible_distribution_major_version >=7 in task "check if reboot is required (7.3+)"

Add support for --check (-c) option

Make sure that the role works in playbooks that run with the --check (-c) option. This option set the variable check_only to true, so that modules will not execute their tasks, but only print what they would do.
Hence some shell snippets and other tasks that set prerequisites and variables need to run in check mode too.

2455582.yml can be removed.

The topic of this SAP note (GCC 6.x) is already covered completely by vars/RedHat_7.yml. And RHEL 8 comes with GCC 6 compatibility.

role fails, if firewalld is not installed

When using this role on a system without firewalld installed, the systemctl module throws an error.
So either we add firewalld to the list of required packages or check that it is not installed

check if reboot is required (7.3+)

Integration of check if reboot is required (7.2) and check if reboot is required (7.3+) are not compatible with each other.

Here are two variables registred with one name. This will not work, because i got everytime the output (variable reboot_required) of the last task, and for a rhel 7.4 system this is a empty variable.
(Changed the register variable to reboot_required_72 before, but this is only much more complex.)

Also i commented the broken passage. Not tested with a rhel 7.2

RHEL 8 PPCLE Packages

The follwoing packages are required for ppcle on Power 9

yum install librtas src rsct.core.utils rsct.core rsct.basic rsct.opt.storagerm
devices.chrp.base.ServiceRM DynamicRM ncurses-libs readline sqlite
sg3_utils libgcc libstdc++ zlib iprutils lsvpd libvpd libservicelog
servicelog powerpc-utils ppc64-diag IBMinvscout

They are currently disabled in the role, as they were not available during test. They are now available via:
https://public.dhe.ibm.com/software/server/POWER/Linux/yum/OSS/RHEL/8/ppc64le/

valid for RHEL8.0 and 8.1

Problem while "include os specific vars"

A variable will be defined three times. This looks like, if this is not the perfect way. I did not tested it with RHEL 7.3 an 7.2.

TASK [sap-hana-preconfigure : include os specific vars]


[WARNING]: While constructing a mapping from /tmp/dev/ansible/sap-hana-preconfigure/vars/RedHat_7.yml, line 5,
column 1, found a duplicate dict key (sap_hana_preconfigure_min_packages). Using last defined value only.
[WARNING]: While constructing a mapping from /tmp/dev/ansible/sap-hana-preconfigure/vars/RedHat_7.yml, line 5,
column 1, found a duplicate dict key (when). Using last defined value only.
ok: [40.114.142.135] => (item=/tmp/dev/ansible/sap-hana-preconfigure/vars/RedHat_7.yml)

Role is not recognizing cloud eus/e4s repositories

- name: Check for EUS or E4S repository
shell: |
yum repolist | awk '
BEGIN {a=0}
/rhel-{{ ansible_distribution_major_version }}-server-e[4u]s-rpms/ {a++}
/rhel-sap-hana-for-rhel-{{ ansible_distribution_major_version }}-server-e[4u]s-rpms/ {a++}
END {print a}'
register: sap_hana_preconfigure_register_eus
changed_when: false

repos are named like this:
rhui-rhel-7-server-rhui-eus-rpms
rhel-sap-for-rhel-7-server-eus-rhui-rpms
rhui-sap-hana-for-rhel-7-server-eus-rpms

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.