เจฎเฉเจ เจนเจพเจฒ เจนเฉ เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจนเฉ
เจธเจตเจพเจฒ เจฆเจพ เจชเจฟเจเฉเจเฉ เจเจน เจนเฉ: เจเฉฑเจ เจธเจฎเฉเจ เจตเจฟเฉฑเจ เจเฉฑเจ เจชเฉเจฐเฉเจเฉเจเจ เจนเฉเฉฐเจฆเจพ เจธเฉ, เจชเจนเจฟเจฒเจพเจ เจเจน เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจ เจคเฉ เจธเจเฉเจฐเจฟเจชเจเจพเจ เจตเจพเจฒเจพ เจเฉฑเจ เจเฉเจเจพ เจฎเฉเจจเฉเจฒเฉเจฅ เจธเฉ, เจชเจฐ เจธเจฎเฉเจ เจฆเฉ เจจเจพเจฒ เจเจน เจตเจงเจฆเจพ เจเจฟเจ, เจธเฉเจตเจพเจตเจพเจ เจตเจฟเฉฑเจ เจตเฉฐเจกเจฟเจ เจเจฟเจ, เจเฉ เจฌเจฆเจฒเฉ เจตเจฟเฉฑเจ เจฎเจพเจเจเฉเจฐเฉเจธเจฐเจตเจฟเจธเจพเจ เจตเจฟเฉฑเจ เจตเฉฐเจกเจฟเจ เจเจฟเจ, เจ เจคเฉ เจซเจฟเจฐ เจธเจเฉเจฒ เจเฉเจคเจพ เจเจฟเจเฅค เจชเจนเจฟเจฒเจพเจ, เจเจน เจธเจญ เจฌเฉเจ เจฐ VPS 'เจคเฉ เจเฉเจคเจพ เจเจฟเจ เจธเฉ, เจเฉเจก เจธเจฅเจพเจชเจค เจเจฐเจจ เจ เจคเฉ เจคเฉเจจเจพเจค เจเจฐเจจ เจฆเฉเจเจ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจเจฟเจธ 'เจคเฉ เจเจตเจพเจฌเจฆเฉเจนเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจธเจตเฉเจเจพเจฒเจค เจเฉเจคเจพ เจเจฟเจ เจธเฉ, เจ เจคเฉ เจนเจฐเฉเจ เจธเฉเจตเจพ เจจเฉเฉฐ เจเจผเจฐเฉเจฐเฉ เจธเฉเจเจฟเฉฐเจเจพเจ เจ เจคเฉ เจเฉเฉฐเจเฉเจเจ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ YAML เจธเฉฐเจฐเจเจจเจพ เจจเจพเจฒ เจเฉฐเจชเจพเจเจฒ เจเฉเจคเจพ เจเจฟเจ เจธเฉ, เจ เจคเฉ เจเฉฑเจ เจธเจฎเจพเจจ เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ เจฒเจ เจตเจฐเจคเฉ เจเจ เจธเฉเฅค เจธเจฅเจพเจจเจ เจฒเจพเจเจ, เจเฉ เจเจฟ เจฌเจนเฉเจค เจธเฉเจตเจฟเจงเจพเจเจจเจ เจธเฉ, เจเจฟเจเจเจเจฟ .k เจเจน เจธเฉฐเจฐเจเจจเจพ เจเฉฑเจ เจเจฒเฉเจฌเจฒ เจเจฌเจเฉเจเจ เจตเจฟเฉฑเจ เจฒเฉเจก เจเฉเจคเฉ เจเจ เจนเฉ, เจชเฉเจฐเฉเจเฉเจเจ เจตเจฟเฉฑเจ เจเจฟเจคเฉ เจตเฉ เจชเจนเฉเฉฐเจเจฏเฉเจ เจนเฉเฅค
เจนเจพเจฒเจพเจเจเจฟ, เจฎเจพเจเจเฉเจฐเฉ เจธเจฐเจตเจฟเจธเจฟเจเจผ เจฆเฉ เจเจฟเจฃเจคเฉ เจตเจฟเฉฑเจ เจตเจพเจงเจพ, เจเจนเจจเจพเจ เจฆเฉ เจเฉเจจเฉเจเจธเจผเจจ, เจ
เจคเฉ
เจเจธ เจธเจฌเฉฐเจง เจตเจฟเฉฑเจ, เจเฉฑเจ เจเฉเจเจซเจฟเจเจฐเฉเจธเจผเจจ เจเจฌเจเฉเจเจ เจฌเจฃเจพเจเจฃ เจฆเฉ เจตเจฟเจงเฉ เจจเฉเฉฐ เจธเจพเจกเฉ เจเจฒเจพเจธเจฟเจ เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ เจ เจคเฉ เจเฉเจฌเฉเจฐ เจฆเฉ เจญเฉเจฆ เจฆเฉเจตเจพเจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจฌเจฃเจพเจเจฃ เจฒเจ เจธเฉเจงเจฟเจ เจเจฟเจ เจธเฉเฅค เจคเฉเจเฉ เจชเจพเจเจฅเจจ เจฆเฉ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจ, เจเฉฑเจ เจนเฉเจฐ เจธเจเจผเจค เจธเฉฐเจฐเจเจจเจพ เจขเจพเจเจเจพ เจตเฉ เจจเจฟเจฐเจงเจพเจฐเจค เจเฉเจคเจพ เจเจฟเจ เจธเฉ, เจเจฟเจตเฉเจ เจเจฟ:
Dict[str, Dict[str, Union[str, int, float]]]]
เจญเจพเจต, เจ เฉฐเจคเจฟเจฎ เจเฉเจเจซเจฟเจ เจจเจพเจฎ เจตเจพเจฒเฉ เจญเจพเจเจพเจ เจตเจพเจฒเจพ เจเฉฑเจ เจธเจผเจฌเจฆเจเฉเจธเจผ เจนเฉ, เจเจฟเจธ เจตเจฟเฉฑเจเฉเจ เจนเจฐ เจเฉฑเจ เจธเจงเจพเจฐเจจ เจเจฟเจธเจฎเจพเจ เจฆเฉ เจฎเฉเฉฑเจฒเจพเจ เจตเจพเจฒเจพ เจเฉฑเจ เจธเจผเจฌเจฆเจเฉเจธเจผ เจนเฉเฅค เจ เจคเฉ เจญเจพเจ เจเฉฑเจ เจเจพเจธ เจเจฟเจธเจฎ เจฆเฉ เจธเฉฐเจฐเจเจจเจพ เจ เจคเฉ เจธเจฐเฉเจคเจพเจ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเจฆเฉ เจนเจจเฅค เจธเจพเจกเฉ เจธเฉฐเจฐเจเจจเจพ เจฆเฉ เจเฉฑเจ เจนเจฟเฉฑเจธเฉ เจฆเฉ เจเฉฑเจ เจเจฆเจพเจนเจฐเจจ:
adminka:
django_secret: "ExtraLongAndHardCode"
db_main:
engine: mysql
host: 256.128.64.32
user: cool_user
password: "SuperHardPassword"
redis:
host: 256.128.64.32
pw: "SuperHardPassword"
port: 26379
smtp:
server: smtp.gmail.com
port: 465
email: [email protected]
pw: "SuperHardPassword"
เจเจธเฉ เจธเจฎเฉเจ, เจเฉเจคเจฐ engine
เจกเจพเจเจพเจฌเฉเจธ SQLite เจคเฉ เจธเจฅเจพเจชเจฟเจค เจเฉเจคเฉ เจเจพ เจธเจเจฆเฉ เจนเจจ, เจ
เจคเฉ redis
เจเจฐเจจ เจฒเจ เจธเฉเฉฑเจ เจเฉเจคเจพ mock
, เจธเฉเจต เจเจฐเจจ เจฒเจ เจซเจพเจเจฒ เจฆเจพ เจจเจพเจฎ เจตเฉ เจจเจฟเจฐเจงเจพเจฐเจฟเจค เจเจฐเจจเจพ - เจเจน เจชเฉเจฐเจพเจฎเฉเจเจฐ เจธเจนเฉ เจขเฉฐเจ เจจเจพเจฒ เจชเจเจพเจฃเฉ เจเจ เจนเจจ เจ
เจคเฉ เจชเฉเจฐเฉเจธเฉเจธ เจเฉเจคเฉ เจเจ เจนเจจ, เจเฉ เจเจฟ เจกเฉเจฌเฉฑเจเจฟเฉฐเจ, เจฏเฉเจจเจฟเจ เจเฉเจธเจเจฟเฉฐเจ เจ
เจคเฉ เจเจฟเจธเฉ เจนเฉเจฐ เจฒเฉเฉเจพเจ เจฒเจ เจเฉเจก เจจเฉเฉฐ เจธเจฅเจพเจจเจ เจคเฉเจฐ 'เจคเฉ เจเจฒเจพเจเจฃเจพ เจเจธเจพเจจ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉเฅค เจเจน เจธเจพเจกเฉ เจฒเจ เจเจพเจธ เจคเฉเจฐ 'เจคเฉ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉ เจเจฟเจเจเจเจฟ เจนเฉเจฐ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจเจผเจฐเฉเจฐเจคเจพเจ เจนเจจ - เจธเจพเจกเฉ เจเฉเจก เจฆเจพ เจนเจฟเฉฑเจธเจพ เจตเฉฑเจ-เจตเฉฑเจ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃเจพเจคเจฎเจ เจเจฃเจจเจพเจตเจพเจ เจฒเจ เจคเจฟเจเจฐ เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจเจน เจจเจพ เจธเจฟเจฐเจซเจผ เจเจฐเจเฉเจธเจเฉเจฐเฉเจธเจผเจจ เจตเจพเจฒเฉ เจธเจฐเจตเจฐเจพเจ 'เจคเฉ เจเฉฑเจฒเจฆเจพ เจนเฉ, เจธเจเฉเจ เจตเฉฑเจ-เจตเฉฑเจ เจธเจเฉเจฐเจฟเจชเจเจพเจ เจฆเฉ เจจเจพเจฒ, เจ
เจคเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจเจพเจ เจฆเฉ เจเฉฐเจชเจฟเจเจเจฐเจพเจ 'เจคเฉ เจตเฉ เจเฉฑเจฒเจฆเจพ เจนเฉ เจเจฟเจจเฉเจนเจพเจ เจฆเฉเจเจฐเจพ เจเฉฐเจฎ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค เจ
เจคเฉ เจฌเฉเจเจเจเจก เจฎเฉเฉฑเจฆเจฟเจเจ เจฆเฉ เจเจฟเฉฐเจคเจพ เจเฉเจคเฉ เจฌเจฟเจจเจพเจ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจกเฉเจเจพ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจชเจพเจเจชเจฒเจพเจเจจเจพเจ เจจเฉเฉฐ เจกเฉเจฌเฉฑเจ เจเจฐเฉเฅค เจคเจฐเฉเจเฉ เจจเจพเจฒ, เจเจน เจธเจพเจเจเจพ เจเจฐเจจเจพ เจฆเฉเจเฉ เจจเจนเฉเจ เจนเฉเจตเฉเจเจพ เจเจฟ เจธเจพเจกเฉ เจฎเฉเฉฑเจ เจเฉเจฒ, เจธเฉฐเจฐเจเจจเจพ เจฒเฉเจเจเจ เจเฉเจก เจธเจฎเฉเจค, เจฆเฉเจเจฐเจพ เจธเจฅเจพเจชเจฟเจค เจเฉเจคเฉ เจเจ เจนเจจ setup.py
- เจเจเฉฑเจ เฉ เจเจน เจธเจพเจกเฉ เจเฉเจก เจจเฉเฉฐ เจเฉฑเจ เจธเจฟเฉฐเจเจฒ เจเจเฉเจธเจฟเจธเจเจฎ เจตเจฟเฉฑเจ เจเฉเฉเจฆเจพ เจนเฉ, เจชเจฒเฉเจเจซเจพเจฐเจฎ เจ
เจคเฉ เจตเจฐเจคเฉเจ เจฆเฉ เจตเจฟเจงเฉ เจคเฉเจ เจธเฉเจคเฉฐเจคเจฐเฅค
เจเฉเจฌเจฐเจจเฉเจเจธ เจชเฉเจก เจฆเจพ เจตเจฐเจฃเจจ เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเจฟเจเจพเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉ:
containers:
- name : enter-api
image: enter-api:latest
ports:
- containerPort: 80
volumeMounts:
- name: db-main-secret-volume
mountPath: /etc/secrets/db-main
volumes:
- name: db-main-secret-volume
secret:
secretName: db-main-secret
เจญเจพเจต, เจนเจฐเฉเจ เจเฉเจชเจค เจเฉฑเจ เจญเจพเจ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเจฆเจพ เจนเฉ. เจญเฉเจฆ เจเจชเจฃเฉ เจเจช เจเจธ เจคเจฐเฉเจนเจพเจ เจฌเจฃเจพเจ เจเจ เจนเจจ:
apiVersion: v1
kind: Secret
metadata:
name: db-main-secret
type: Opaque
stringData:
db_main.yaml: |
engine: sqlite
filename: main.sqlite3
เจเจเฉฑเจ เฉ เจเจธ เจฆเฉ เจจเจคเฉเจเฉ เจตเจเฉเจ เจฎเจพเจฐเจ เจฆเฉ เจจเจพเจฒ YAML เจซเจพเจเจฒเจพเจ เจฆเฉ เจธเจฟเจฐเจเจฃเจพ เจนเฉเฉฐเจฆเฉ เจนเฉ /etc/secrets/db-main/section_name.yaml
เจ เจคเฉ เจธเจฅเจพเจจเจ เจฒเจพเจเจเจพเจ เจฒเจ, เจเฉเจเจซเจฟเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจเฉ เจเจฟ เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจฐเฉเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจตเจฟเฉฑเจ เจธเจฅเจฟเจค เจนเฉ เจเจพเจ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒ เจตเจฟเฉฑเจ เจฆเจฐเจธเจพเจ เจฎเจพเจฐเจ เจฆเฉ เจจเจพเจฒ เจนเฉเฅค เจเจนเจจเจพเจ เจธเฉเจตเจฟเจงเจพเจตเจพเจ เจฒเจ เจเจผเจฟเฉฐเจฎเฉเจตเจพเจฐ เจเฉเจก เจจเฉเฉฐ เจตเจฟเจเจพเฉเจฃ เจตเจพเจฒเฉ เจตเจฟเฉฑเจ เจฆเฉเจเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ.
config.py
__author__ = 'AivanF'
__copyright__ = 'Copyright 2020, AivanF'
import os
import yaml
__all__ = ['config']
PROJECT_DIR = os.path.abspath(__file__ + 3 * '/..')
SECRETS_DIR = '/etc/secrets'
KEY_LOG = '_config_log'
KEY_DBG = 'debug'
def is_yes(value):
if isinstance(value, str):
value = value.lower()
if value in ('1', 'on', 'yes', 'true'):
return True
else:
if value in (1, True):
return True
return False
def update_config_part(config, key, data):
if key not in config:
config[key] = data
else:
config[key].update(data)
def parse_big_config(config, filename):
'''
Parse YAML config with multiple section
'''
if not os.path.isfile(filename):
return False
with open(filename) as f:
config_new = yaml.safe_load(f.read())
for key, data in config_new.items():
update_config_part(config, key, data)
config[KEY_LOG].append(filename)
return True
def parse_tiny_config(config, key, filename):
'''
Parse YAML config with a single section
'''
with open(filename) as f:
config_tiny = yaml.safe_load(f.read())
update_config_part(config, key, config_tiny)
config[KEY_LOG].append(filename)
def combine_config():
config = {
# To debug config load code
KEY_LOG: [],
# To debug other code
KEY_DBG: is_yes(os.environ.get('DEBUG')),
}
# For simple local runs
CONFIG_SIMPLE = os.path.join(PROJECT_DIR, 'config.yaml')
parse_big_config(config, CONFIG_SIMPLE)
# For container's tests
CONFIG_ENVVAR = os.environ.get('CONFIG')
if CONFIG_ENVVAR is not None:
if not parse_big_config(config, CONFIG_ENVVAR):
raise ValueError(
f'No config file from EnvVar:n'
f'{CONFIG_ENVVAR}'
)
# For K8s secrets
for path, dirs, files in os.walk(SECRETS_DIR):
depth = path[len(SECRETS_DIR):].count(os.sep)
if depth > 1:
continue
for file in files:
if file.endswith('.yaml'):
filename = os.path.join(path, file)
key = file.rsplit('.', 1)[0]
parse_tiny_config(config, key, filename)
return config
def build_config():
config = combine_config()
# Preprocess
for key, data in config.items():
if key.startswith('db_'):
if data['engine'] == 'sqlite':
data['filename'] = os.path.join(PROJECT_DIR, data['filename'])
# To verify correctness
if config[KEY_DBG]:
print(f'** Loaded config:n{yaml.dump(config)}')
else:
print(f'** Loaded config from: {config[KEY_LOG]}')
return config
config = build_config()
เจเฉฑเจฅเฉ เจคเจฐเจ เจเจพเจซเจผเฉ เจธเจงเจพเจฐเจจ เจนเฉ: เจ เจธเฉเจ เจชเฉเจฐเฉเจเฉเจเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจคเฉเจ เจตเฉฑเจกเฉเจเจ เจธเฉฐเจฐเจเจจเจพเจตเจพเจ เจ เจคเฉ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒ เจฆเฉเจเจฐเจพ เจฎเจพเจฐเจเจพเจ, เจ เจคเฉ เจเฉเจฌเฉเจฐ เจธเฉเจเจฐเฉเจเจธ เจคเฉเจ เจเฉเจเฉ เจธเฉฐเจฐเจเจจเจพ เจญเจพเจเจพเจ เจจเฉเฉฐ เจเฉเฉเจฆเฉ เจนเจพเจ, เจ เจคเฉ เจซเจฟเจฐ เจเจนเจจเจพเจ เจจเฉเฉฐ เจฅเฉเฉเจพ เจเจฟเจนเจพ เจชเฉเจฐเฉเจชเฉเจฐเฉเจธเฉเฉฑเจธ เจเจฐเจฆเฉ เจนเจพเจเฅค เจชเจฒเฉฑเจธ เจเฉเจ เจตเฉเจฐเฉเจเจฌเจฒเฅค เจฎเฉเจ เจจเฉเจ เจเจฐเจฆเจพ เจนเจพเจ เจเจฟ เจเจฆเฉเจ เจญเฉเจฆ เจคเฉเจ เจซเจพเจเจฒเจพเจ เจฆเฉ เจเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจคเจพเจ เจเฉฑเจ เจกเฉเฉฐเจเจพเจ เจธเฉเจฎเจพ เจตเจฐเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจเจฟเจเจเจเจฟ K8s เจนเจฐเฉเจ เจเฉเจชเจค เจตเจฟเฉฑเจ เจเฉฑเจ เจฒเฉเจเจฟเจ เจนเฉเจเจ เจซเฉเจฒเจกเจฐ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉ เจเจฟเฉฑเจฅเฉ เจญเฉเจฆ เจเจชเจฃเฉ เจเจช เจธเจเฉเจฐ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจ, เจ เจคเฉ เจธเจฟเจฐเจซ เจเฉฑเจ เจฒเจฟเฉฐเจ เจเฉฑเจ เจชเฉฑเจงเจฐ 'เจคเฉ เจธเจฅเจฟเจค เจนเฉเฉฐเจฆเจพ เจนเฉ.
เจฎเฉเจจเฉเฉฐ เจเจฎเฉเจฆ เจนเฉ เจเจฟ เจเฉ เจฆเฉฑเจธเจฟเจ เจเจฟเจ เจนเฉ เจเจน เจเจฟเจธเฉ เจฒเจ เจฒเจพเจญเจฆเจพเจเจ เจนเฉเจตเฉเจเจพ :) เจธเฉเจฐเฉฑเจเจฟเจ เจเจพเจ เจธเฉเจงเจพเจฐ เจฒเจ เจนเฉเจฐ เจเฉเจคเจฐเจพเจ เจฌเจพเจฐเฉ เจเฉเจ เจตเฉ เจเจฟเฉฑเจชเจฃเฉเจเจ เจ เจคเฉ เจธเจฟเจซเจผเจพเจฐเจธเจผเจพเจ เจธเจตเฉเจเจพเจฐ เจเฉเจคเฉเจเจ เจเจพเจเจฆเฉเจเจ เจนเจจเฅค เจเจฎเจฟเจเจจเจฟเจเฉ เจฆเฉ เจฐเจพเจ เจตเฉ เจฆเจฟเจฒเจเจธเจช เจนเฉ, เจนเฉ เจธเจเจฆเจพ เจนเฉ เจเจฟ เจเจน ConfigMaps (เจธเจพเจกเจพ เจชเฉเจฐเฉเจเฉเจเจ เจ เจเฉ เจคเฉฑเจ เจเจนเจจเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจจเจนเฉเจ เจเจฐเจฆเจพ) เจฒเจ เจธเจฎเจฐเจฅเจจ เจเฉเฉเจจเจพ เจ เจคเฉ GitHub / PyPI 'เจคเฉ เจเฉเจก เจจเฉเฉฐ เจชเฉเจฐเจเจพเจธเจผเจฟเจค เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉ? เจตเจฟเจ เจเจคเฉเจเจค เจคเฉเจฐ 'เจคเฉ, เจฎเฉเจ เจธเฉเจเจฆเจพ เจนเจพเจ เจเจฟ เจ เจเจฟเจนเฉเจเจ เจเฉเจเจผเจพเจ เจชเฉเจฐเฉเจเฉเจเจเจพเจ เจฒเจ เจธเจฐเจต เจตเจฟเจเจชเจ เจนเฉเจฃ เจฒเจ เจฌเจนเฉเจค เจตเจฟเจ เจเจคเฉเจเจค เจนเจจ, เจ เจคเฉ เจนเฉเจฐ เจฒเฉเจเจพเจ เจฆเฉ เจฒเจพเจเฉเจเจฐเจจ 'เจคเฉ เจฅเฉเฉเจพ เจเจฟเจนเจพ เจเจพเจค เจฎเจพเจฐเจจเจพ, เจเจฟเจตเฉเจ เจเจฟ เจเฉฑเจฅเฉ เจฆเจฟเฉฑเจคเจพ เจเจฟเจ เจนเฉ, เจ เจคเฉ เจธเฉเจเจฎเจคเจพเจตเจพเจ, เจธเฉเจเจพเจตเจพเจ เจ เจคเฉ เจตเจงเฉเจ เจ เจญเจฟเจเจธเจพเจ เจฆเฉ เจเจฐเจเจพ, เจเฉ เจฎเฉเจ เจเจฟเฉฑเจชเจฃเฉเจเจ เจตเจฟเฉฑเจ เจฆเฉเจเจฃ เจฆเฉ เจเจฎเฉเจฆ เจเจฐเจฆเจพ เจนเจพเจเฅค , เจเจพเจซเฉ เจนเฉ ๐
เจธเจฟเจฐเจซเจผ เจฐเจเจฟเจธเจเจฐเจก เจเจชเจญเฉเจเจคเจพ เจนเฉ เจธเจฐเจตเฉเจเจฃ เจตเจฟเฉฑเจ เจนเจฟเฉฑเจธเจพ เจฒเฉ เจธเจเจฆเฉ เจนเจจเฅค
เจเฉ เจฎเฉเจจเฉเฉฐ เจเฉฑเจ เจชเฉเจฐเฉเจเฉเจเจ/เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจตเจเฉเจ เจชเฉเจฐเจเจพเจธเจผเจฟเจค เจเจฐเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ?
-
0,0%เจนเจพเจ, เจฎเฉเจ /contribution0 เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจพเจเจเจพ
-
33,3%เจนเจพเจ, เจเจน เจฌเจนเฉเจค เจตเจงเฉเจ เจฒเฉฑเจเจฆเจพ เจนเฉ 4
-
41,7%เจจเจนเฉเจ, เจเจฟเจจเฉเจนเจพเจ เจจเฉเฉฐ เจเจธ เจจเฉเฉฐ เจเจชเจฃเฉ เจเฉเจฆ เจฆเฉ เจซเจพเจฐเจฎเฉเจ เจตเจฟเฉฑเจ เจ เจคเฉ เจเจชเจฃเฉเจเจ เจฒเฉเฉเจพเจ เจฎเฉเจคเจพเจฌเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ5
-
25,0%เจฎเฉเจ เจเจตเจพเจฌ เจฆเฉเจฃ เจคเฉเจ เจชเจฐเจนเฉเจเจผ เจเจฐเจพเจเจเจพ 3
12 เจเจชเจญเฉเจเจคเจพเจตเจพเจ เจจเฉ เจตเฉเจ เจชเจพเจเฅค 3 เจเจชเจญเฉเจเจคเจพ เจชเจฐเจนเฉเจเจผ เจฐเจนเฉเฅค
เจธเจฐเฉเจค: www.habr.com