แแแฃแแแ แฏแแก แงแแแแแก!
แแแแชแแแ แจแแแแแแแ - แแ แแก แแแแแแ, แฌแแ แแแแแแแแแแ แแแแแ แกแฃแ แแแแ, แ แแแแแแช แฃแแแ แแแแแแขแแแแก N แกแแ แแแ แแแแ
NiFi Site to Site (S2S) แแ แแก แฃแกแแคแ แแฎแ, แแแแแแแ แแแแคแแแฃแ แแ แแแแแ แแแ แแแแแชแแแแ แแแแแกแแขแแแแ NiFi แแแกแขแแแชแแแแก แจแแ แแก. แ แแแแ แแฃแจแแแแก S2S, แแฎแแแแ
แแ แจแแแแฎแแแแแแจแ, แ แแแแกแแช แแกแแฃแแ แแแ แแแแแชแแแแ แแแแแชแแแแแ S2S-แแก แแแแแงแแแแแแ, แแ แ แแแแแแแแก แแฌแแแแแ แแแแแแขแ, แแแแ แ แกแแ แแแ แ. แแแแแแขแ แแแแแแแแก แแแแแชแแแแแก, แกแแ แแแ แ แแฆแแแก. แแแ แจแแ แแก แแแแแชแแแแ แแแแแชแแแแก แแแแคแแแฃแ แแชแแแก แแ แ แแแ:
- แแแแงแแแแแก. แแแแแแขแแก แแแแแแแแแแแ แแแแแชแแแแแ แแแแแแแแแ แแแกแขแแแชแแฃแ แ แแ แแชแแกแแก แฏแแฃแคแแก (RPG) แแแแแงแแแแแแ. แกแแ แแแ แแก แแแแแแแแแ แแแแแชแแแแแ แแแแฆแแแ แจแแงแแแแแก แแแ แขแแก แแแแแงแแแแแแ
- แแแแแแ. แกแแ แแแ แ แแฆแแแก แแแแแชแแแแแก RPG-แแก แแแแแงแแแแแแ, แแแแแแขแ แแแแแแแแก แแแแแแแแแแ แแแ แขแแก แแแแแงแแแแแแ.
แแแกแแจแแแแ แแแแแแ แแแแฎแแแ Apache Registry-แจแ.
Apache NiFi Registry แแ แแก Apache NiFi-แแก แฅแแแแ แแแฅแขแ, แ แแแแแแช แฃแแ แฃแแแแแงแแคแก แแแกแขแ แฃแแแแขแก แแแแแแแก แจแแแแฎแแแกแ แแ แแแ แกแแแก แแแแขแ แแแแกแแแแก. แแ แแแแแ แ GIT. แแแคแแ แแแชแแ แแแกแขแแแแชแแแก, แแแแคแแแฃแ แแชแแแกแ แแ แ แแแกแขแ แแแ แแฃแจแแแแแก แจแแกแแฎแแ แจแแแแซแแแแ แแฎแแแแ แแฅ
แแแกแแฌแงแแกแจแ, แ แแแแกแแช N แแ แแก แแชแแ แ แ แแชแฎแแ, แแแแแแ แแแแฌแแแแแ แแ แแแแแฎแแแแแ แฎแแแแ แแแกแแฆแแ แแ แแจแ.
แแแแ แแ แ แแช N แแแ แแแแ, แแ แแแแแแแแ แฃแคแ แ แแ แแแแแ แแชแฎแแแแแ แฎแแแแ:
- แแแแแแแก แแแแแฎแแแแแก แแแขแ แแ แ แกแญแแ แแแแ. แแฅแแแ แฃแแแ แจแแฎแแแแแ แงแแแแ แกแแ แแแ แแ
- แจแแแแแแแก แแแแแฎแแแแแก แจแแชแแแแแแ แฎแแแแ. แแฅ แแแแแแฎแแแก, แแแแ แแ แแฅ แแแแแแฌแงแแก
- แแแแแแแแฃแ แ แจแแชแแแแแแ แแแแ แ แแแแแแแแแ แแกแแแแกแ แแแแ แแชแแแแแก แจแแกแ แฃแแแแแกแแก
แแก แงแแแแแคแแ แ แแแแแแงแแแแก แแฅแแแแ, แ แแ แแ แแชแแกแแก แแแขแแแแขแแแแชแแ แแแญแแ แแแแ. แแ แแชแแแ แจแแแแแแ แแแแแ แแ แแ แแแแแแแก แแแแแกแแญแ แแแแ:
- แแแแแแงแแแแ MiNiFi แแแชแแแแ NiFi
- NiFi CLI
- NiPyAPI
MiNiFi-แแก แแแแแงแแแแแแ
แแ แแ แแแแแแแก แแแแแแ แแแแจแ แแแแแฎแแแ แแแแ แแแแแ แแ แแ แฅแแแแ แแแฅแขแ - MiNiFi C2 แกแแ แแแ แ. แแก แแ แแแฃแฅแขแ แแแแแฃแแแแแแแ แแงแแก แชแแแขแ แแแฃแ แ แฌแแ แขแแแ แแแแคแแแฃแ แแชแแแก แแแแแแแแแแก แแ แฅแแขแแฅแขแฃแ แแจแ. แ แแแแ แแแแแแแแคแแแฃแ แแ แแ แแแ แแแ - แแฆแฌแแ แแแแ
แแแแแ แแแชแแแฃแ แกแขแแขแแแจแ แแฆแฌแแ แแแ แแแ แแแแขแ แแฃแจแแแแก แแ แแ แแ แแก แ แแฃแแ แแแแกแแฎแแ แชแแแแแแแแ, แแแแ แแ แแ แฃแแแ แแแแแแแแฌแงแแแก แจแแแแแแ:
- Minifi-แก แแ แแฅแแก แงแแแแ แแ แแชแแกแแ แ nifi-แแแ
- แแแแแคแ แแ แแชแแกแแ แแก แแแ แกแแแแ แฉแแแแ แฉแแแ NiFi แแ แแชแแกแแ แแก แแแ แกแแแแก.
แฌแแ แแก แแ แแก NiFi-แแก แฃแแฎแแแกแ แแแ แกแแแ 1.9.2. MiniFi แแ แแชแแกแแ แแก แฃแแฎแแแกแ แแแ แกแแ แแ แแก 1.7.0. แแ แแชแแกแแ แแแ แจแแแซแแแแ แแแแแแขแแก MiNiFi-แก, แแแแ แแ NiFi แแ MiniFi แแ แแชแแกแแ แแแก แจแแ แแก แแแ แกแแแแแก แจแแฃแกแแแแแแแแก แแแแ, แแก แจแแแซแแแแ แแ แแแฃแจแแแก.
NiFi CLI
แแแแกแฏแแแแแ
แแแฃแจแแแ แแแแฃแแแแฃแ แ แแ แแแ แแแ
./bin/cli.sh
_ ___ _
Apache (_) .' ..](_) ,
_ .--. __ _| |_ __ )
[ `.-. | [ |'-| |-'[ | /
| | | | | | | | | | ' '
[___||__][___][___] [___]', ,'
`'
CLI v1.9.2
Type 'help' to see a list of available commands, use tab to auto-complete.
แแแแกแแแแแก, แ แแ แ แแแกแขแ แแแแ แฉแแแขแแแ แแแ แกแแญแแ แ แแแแแแ, แฃแแแ แแแชแแแแ bucket-แแก (bucket identifier) โโแแ แแแแแ แแแแแแแก (flow identifier) โโแแแแแขแแคแแแแขแแ แแแ. แแ แแแแแชแแแแแแก แแแฆแแแ แจแแกแแซแแแแแแแ cli แแ NiFi แ แแแกแขแ แแก แแแ แแแขแแ แคแแแกแแก แกแแจแฃแแแแแแ. แแแ แแแขแแ แคแแแกแจแ แแกแ แแแแแแงแฃแ แแแ:
CLI-แแก แแแแแงแแแแแแ แแก แแแแแแแ:
#> registry list-buckets -u http://nifi-registry:18080
# Name Id Description
- -------------- ------------------------------------ -----------
1 test_bucket 709d387a-9ce9-4535-8546-3621efe38e96 (empty)
#> registry list-flows -b 709d387a-9ce9-4535-8546-3621efe38e96 -u http://nifi-registry:18080
# Name Id Description
- ------------ ------------------------------------ -----------
1 test_flow d27af00a-5b47-4910-89cd-9c664cd91e85
แฉแแแ แแแฌแงแแแ แแ แแชแแกแแก แฏแแฃแคแแก แแแแแ แขแก แ แแแกแขแ แแแแ:
#> nifi pg-import -b 709d387a-9ce9-4535-8546-3621efe38e96 -f d27af00a-5b47-4910-89cd-9c664cd91e85 -fv 1 -u http://nifi:8080
7f522a13-016e-1000-e504-d5b15587f2f3
แแแแจแแแแแแแแแ แแฃแแฅแขแแ แแก, แ แแ แแแแแกแแแแ แ nifi แแแกแขแแแชแแ แจแแแซแแแแ แแแแแกแแแฆแแ แแก, แ แแแแ แช แแแกแแแแซแแแ, แ แแแแแแแแแช แแแแแ แแแ แแ แแชแแกแแก แฏแแฃแคแก.
แแ แแชแแกแแก แฏแแฃแคแ แแแแแแขแ แแแฉแแ แแแฃแ แแ แแชแแกแแ แแแก, แแแแ แแแฌแงแแแแ แกแแญแแ แ
#> nifi pg-start -pgid 7f522a13-016e-1000-e504-d5b15587f2f3 -u http://nifi:8080
แแจแแแแแแ แแ, แแ แแชแแกแแ แแแ แแแแฌแงแ. แแฃแแชแ, แแแแแแแแแก แแแ แแแแแแก แแแฎแแแแแ, แฉแแแ แแแญแแ แแแแ NiFi แแแกแขแแแชแแแแ แแแแแชแแแแแแก แกแฎแแ แแแกแขแแแชแแแแแ แแแกแแแแแแแแ. แแแแฃแจแแแ, แ แแ แแฅแแแ แจแแแ แฉแแแ Push แแแแแแ แกแแ แแแ แแ แแแแแชแแแแแแก แแแแแกแแขแแแแ. แแแแแชแแแแ แแแแแชแแแแก แแ แแแแแแแแแกแแแแก, แแฅแแแ แฃแแแ แฉแแ แแแ แแแแแชแแแแ แแแแแชแแแ แแแแแขแแแฃแ Remote Process Group-แแ (RPG), แ แแแแแแช แฃแแแ แจแแแแก แฉแแแแก แแแแแแจแ.
CLI-แจแ แแ แกแฎแแ แฌแงแแ แแแแจแ แแ แกแแแฃแ แแแแฃแแแแขแแชแแแจแ แแ แแแ แแแแแแ แแแ แแแแแชแแแแ แแแแแชแแแแก แแแกแแแฅแขแแฃแ แแแแแ. แแฃ แแชแแ แ แแแแ แแแแแแแแ แแก, แแแฌแแ แแ แแแแแแขแแ แแแจแ.
แ แแแ แแแจแ แแแแฅแแก แแ แแแแ แแแ แ แแแแแแแ แฌแแแแแแ, แแแแแกแแแแแก แแแแแแแ! แแ แแ แแแแแแแก แแแกแแแแแ แแแแแ แจแแแแซแแแแ แแแแแแงแแแแ NiFi API. แแแแแ แแแแแแแงแแแแ แจแแแแแแ แแแแแแ, แแแแฆแแ ID แแแแแ แแแชแแแฃแแ แแแแแแแแแแแแแ (แฉแแแแก แจแแแแฎแแแแแจแ แแก แแ แแก 7f522a13-016e-1000-e504-d5b15587f2f3). NiFi API แแแแแแแแแก แแฆแฌแแ แ
แกแฎแแฃแแจแ แแฅแแแ แฃแแแ แแแแแ แแ JSON, แแกแ:
{
"revision": {
"clientId": "value",
"version": 0,
"lastModifier": "value"
},
"state": "value",
"disconnectedNodeAcknowledged": true
}
แแแ แแแแขแ แแแ, แ แแแแแแแช แฃแแแ แแงแแก แจแแแกแแแฃแแ, แ แแ แแก แแแฃแจแแแก:
แแงแ - แแแแแชแแแแ แแแแแชแแแแก แกแขแแขแฃแกแ. แฎแแแแแกแแฌแแแแแแ: TRANSMITTING แแแแแชแแแแ แแแแแชแแแแก แฉแแกแแ แแแแแ, STOPPED แแแกแแแแจแแ
แแแ แกแแ - แแ แแชแแกแแ แแก แแแ แกแแ
แแแ แกแแแก แจแแฅแแแแกแแก แแแแฃแแแกแฎแแแแ แแฅแแแแ 0, แแแแ แแ แแ แแแ แแแแขแ แแแแก แแแฆแแแ แจแแกแแซแแแแแแแ แแแแแแแก แแแแแงแแแแแแ
bash แกแแ แแแขแแแแก แแแงแแแ แฃแแแแแแแก แแก แแแแแแ แจแแแซแแแแ แฉแแแแแก แจแแกแแคแแ แแกแ, แแแแ แแ แฉแแแแแแก แชแแขแ แ แแฃแแแ - bash แกแแ แแแขแแแ แแ แแ แแก แฉแแแ แกแแงแแแ แแแ. แจแแแแแแ แแแแแแ แฃแคแ แ แกแแแแขแแ แแกแ แแ แแแกแแฎแแ แฎแแแแแแ แฉแแแ แแแ แแ.
NiPyAPI
NiPyAPI แแ แแก แแแแแแแก แแแแแแแแแแ NiFi แแแกแขแแแชแแแแแแ แฃแ แแแแ แแแแแกแแแแก.
แฉแแแแ แกแแ แแแขแ แแแแคแแแฃแ แแชแแแก แแแกแแฎแกแแแแแ แแ แแก แแ แแแ แแแ Python-แจแ. แแแแแ แแแแแแแแแ แแแแแ แแแแแ.
แฉแแแ แแแแแงแแแแ แแแแคแแแฃแ แแชแแแแ แจแแแแแแแ แแฃแจแแแแแกแแแแก. แแแแแญแแ แแแแ แจแแแแแแ แแแ แแแแขแ แแแ:
nipyapi.config.nifi_config.host = 'http://nifi:8080/nifi-api' #ะฟััั ะดะพ nifi-api ะธะฝััะฐะฝัะฐ, ะฝะฐ ะบะพัะพัะพะผ ัะฐะทะฒะพัะฐัะธะฒะฐะตะผ process group
nipyapi.config.registry_config.host = 'http://nifi-registry:18080/nifi-registry-api' #ะฟััั ะดะพ nifi-registry-api registry
nipyapi.config.registry_name = 'MyBeutifulRegistry' #ะฝะฐะทะฒะฐะฝะธะต registry, ะบะฐะบ ะฑัะดะตั ะฝะฐะทัะฒะฐัััั ะฒ ะธะฝััะฐะฝัะต nifi
nipyapi.config.bucket_name = 'BucketName' #ะฝะฐะทะฒะฐะฝะธะต bucket, ะธะท ะบะพัะพัะพะณะพ ะฟะพะดััะณะธะฒะฐะตะผ flow
nipyapi.config.flow_name = 'FlowName' #ะฝะฐะทะฒะฐะฝะธะต flow, ะบะพัะพัะพะต ะฟะพะดััะณะธะฒะฐะตะผ
แจแแแแแ แแ แฉแแแกแแแ แแ แแแแแแแแแแแก แแแแแแแแแก แกแแฎแแแแแก, แ แแแแแแแช แแฆแฌแแ แแแแ
แแแแแแแจแแ แแ แ แแแกแขแ แ nifi แแแกแขแแแชแแแแ แแแแแงแแแแแแ
nipyapi.versioning.create_registry_client
แแ แแขแแแแ, แแฅแแแ แแกแแแ แจแแแแซแแแแ แแแแแแขแแ แจแแแแฌแแแแ, แ แแ แ แแแกแขแ แ แฃแแแ แแแแแขแแแฃแแแ แแแแแแแแแ; แแแแกแแแแแก แจแแแแซแแแแ แแแแแแงแแแแ แแแแแแ
nipyapi.versioning.list_registry_clients
แฉแแแ แแแแฃแแแแ แแแแแฃแแก แแแแแแแจแ แแแแแแแก แจแแแแแแแ แกแแซแแแแแแ
nipyapi.versioning.get_registry_bucket
แแแแแแแ แแแแแฃแแแก แแแแแงแแแแแแ, แฉแแแ แแแซแแแ แแแแแแก
nipyapi.versioning.get_flow_in_bucket
แจแแแแแแ, แแแแจแแแแแแแแแแ แแแแกแแแแแก, แฃแแแ แแแแแแขแ แแฃ แแ แ แแก แแ แแชแแกแ แฏแแฃแคแ. แแ แแชแแกแแก แฏแแฃแคแ แแแแแแกแแแฃแแแ แแแแ แแแแแขแแแแก แแแฎแแแแแ แแ แจแแแซแแแแ แฌแแ แแแแจแแแก แกแแขแฃแแชแแ, แ แแแแกแแช แแแแ แ แแแแแแแแแขแ แแแแแแแ แแ แแก. แแ แจแแแแแแฌแแ, แแก แจแแแซแแแแ แแแฎแแแก :) แงแแแแ แแแแแขแแแฃแแ แแ แแชแแกแแก แฏแแฃแคแแก แแแกแแฆแแแแ แฉแแแ แแแงแแแแแ แแแแแแก
nipyapi.canvas.list_all_process_groups
แฉแแแ แจแแแแแซแแแ แจแแแแแแแ แซแแแแ, แแแแแแแแแ, แกแแฎแแแแ.
แแ แแ แแฆแแฌแแ แจแแแแแแแก แแแแแฎแแแแแก แแ แแชแแกแก, แแฎแแแแ แแแขแงแแ, แ แแ แแฃ แแ แแชแแกแแ แแแ แแแแแแขแแแ แจแแแแแแแก แแฎแแ แแแ แกแแแก, แแแจแแ แ แแแแแจแ แจแแขแงแแแแแแแแแแก แแ แกแแแแแแก แแ แแแแแแ แแ แแ แแก. แแแแ แแ แแฃ แแ แแชแแกแแ แแแ แแแแฆแแแฃแแแ, แแแจแแ แจแแแซแแแแ แฌแแ แแแแจแแแก แแ แแแแแแแแ (nifi แแ แแแซแแแแ แกแแจแฃแแแแแแก แแแแแฆแแ แแ แแชแแกแแ แ, แแฃ แแแก แฌแแ แจแแขแงแแแแแแแแแแก แ แแแ แแแแ แแแแ). แแฃ แแแแแขแแ แแกแแแ แ แแแแ แแแแแแแแ แ แแก แแ แแแแแแ, แแแแฌแแ แแ แแ แแแแแแฎแแแแแ แแ แกแแแแแฎแก. แแแแขแแฅแขแแแ แกแขแแขแแแก แแแแแก. แแแแแ แแแแแแแแแ แแ แแชแแกแแก แฏแแฃแคแแก แแแแแขแแแแก แกแแคแแฎแฃแ แแ.
แกแแ แแแขแแก แแแแแ แแแแกแแก, แแ แจแแแฎแแแ แแแแแกแแแฃแ แแแแก, แ แแ แแแแแแแก แฃแแฎแแแกแ แแแ แกแแ แงแแแแแแแแก แแ แแ แแก แแแแฆแแแฃแแ, แแแแขแแ แแแ แฉแแแ แฏแแ แจแแแแแฌแแแ แแก แแแ แกแแ:
nipyapi.versioning.get_latest_flow_ver
แแ แแชแแกแแก แฏแแฃแคแแก แแแงแแแแแ:
nipyapi.versioning.deploy_flow_version
แฉแแแ แแแฌแงแแแ แแ แแชแแกแแ แแแก:
nipyapi.canvas.schedule_process_group
CLI-แแก แจแแกแแฎแแ แแแแแจแ แแฌแแ แ แ แแ แแแแแชแแแแ แแแแแชแแแ แแแขแแแแขแฃแ แแ แแ แแ แแก แฉแแ แแฃแแ แแแกแขแแแชแแฃแ แ แแ แแชแแกแแก แฏแแฃแคแจแ? แกแแ แแแขแแก แแแแฎแแ แชแแแแแแแกแแก แแแช แจแแแแฅแแแ แแก แแ แแแแแแ. แแ แแ แแก แแ แแแ แจแแแซแแแ แแแแแชแแแแ แแแแแชแแแแก แแแฌแงแแแ API-แแก แแแแแงแแแแแแ แแ แแแแแแฌแงแแแขแ แแแแฌแแ แ NiPyAPI แแแแแแแแแแแก แแแแแแแแแ แก แแ แแแฎแแแ แ แฉแแแ/แแแฎแแแ แแแ. แแแแแแแแแ แแ แแแแแแแฎแแแฃแ แ, แแแแแแฎแแแแ แแ แแแแแแ แแ แแแ แแแฌแแ แ, แ แแ แแ แ แกแญแแ แแแแแแ โแ แแฆแแชแแก แจแแกแแแแฌแแแแแแโ. แแ แจแแแแแ, แแ แแแแ แแฆแแก แจแแแแแ, แแแแแก แฌแแ แแแ, แ แแแแแจแแช แแแแแแจแ แฌแแ แแ แคแฃแแฅแชแแ, แ แแแแแแช แแแแแ แแแก แฉแแแก แแแจแแแแแก แแ แแแแแแแก!!! แแ แแ แแก NiPyAPI แแแ แกแแ แแงแ 0.13.3 แแ, แ แ แแฅแแ แฃแแแ, แแกแแแแกแ แแ แแคแแ แ แแงแ. แแแแ แแ 0.14.0 แแแ แกแแแจแ, แ แแแแแแช แชแแขแ แฎแแแก แฌแแ แแแแแแแแ, แแก แคแฃแแฅแชแแ แฃแแแ แแงแ แแแแแแแแแแแจแ. แฒจแแฎแแแแ แ,
nipyapi.canvas.set_remote_process_group_transmission
แแกแ แ แแ, NiPyAPI แแแแแแแแแแแก แแแแแงแแแแแแ, แฉแแแ แแแแแแแแจแแ แแ แ แแแกแขแ แ, แแแแแคแแ แแแแแ แแแแแแ แแ แแแแแฌแงแแ แแ แแชแแกแแ แแแ แแ แแแแแชแแแแ แแแแแชแแแแช. แจแแแแแ แแฅแแแ แจแแแแซแแแแ แแแแแแ แชแฎแแ แแแแ, แแแแแแขแแ แงแแแแ แกแแฎแแก แฉแแแ, แฉแแฌแแ แ แแ แแก แงแแแแแคแแ แแ. แแแแ แแ แแก แกแ แฃแแแแ แแแแกแฎแแแแแแฃแแ แแแแแแแ.
แแแขแแแแขแแแแชแแแก แแแ แแแแขแแแแแแ, แ แแช แแ แแแแแแฎแแแแ, แแแแ แแแฉแแแแแแแแ แงแแแแแแ แแคแแฅแขแฃแ แ. แฏแแ แแ แแ, แแก แฏแแ แแแแแ แแแแแแแก แแแแแ, แ แแแแแจแแช แจแแแแซแแแแ แฉแแกแแแ แแแแฎแแแ แ แแ แแแ แแแแก แแแแ แแ แแกแแ แแแแแแ แแ แแแ แแแแ แแแแก แแแแก แงแแแแ แฃแแแ แแขแแกแแแแ. แแแแ แแช, NiPyAPI แแ แแแฅแขแ แแฅแขแแฃแ แแ แแแแแ แแแแ แแ แแ แแแแแแแแแก แจแแแแฎแแแแแจแ แจแแแแซแแแแ แแแฌแแ แแ แแแแแแแแแ แก. แแแกแแแ, NiPyAPI แแแแแ แฃแคแ แ แแแฅแแแแ แแแกแขแ แฃแแแแขแแ NiFi-แกแแแ แฃแ แแแแ แแแแแกแแแแก แ แแฃแแ แแ แแแแแแแแแก แแแแแกแแญแ แแแแ. แแแแแแแแแ, แแแแก แแแกแแแแแแแ, แแ แแก แแฃ แแ แ แจแแขแงแแแแแแแแแแก แ แแแแแ แชแแ แแแแ แแแแแแจแ แแ แจแแกแแซแแแแแแแ แแฃ แแ แ แแ แแชแแกแแก แฏแแฃแคแแก แแแแแฎแแแแ.
แฒกแฃแ แแก แแ แแก. แแ แแฆแแฌแแ แ 3 แแแแแแแ แแแแแแแก แแแฌแแแแแแก แแแขแแแแขแแแแชแแแกแแแแก NiFi-แจแ, แฎแแ แแแแแแ, แ แแแแแแแช แจแแแซแแแแ แแแแแแแแแ แแ แฌแแแฌแงแแแก แแ แแแแแฌแแแ แกแแแฃแจแแ แแแแ แแแฌแแแแแแก แแแขแแแแขแแแแชแแแกแแแแก. แแฃ แแฅแแแแช แแกแแแ แแแแแขแแ แแกแแแ แแก แแแแ, แ แแแแ แช แแ -
แฌแงแแ แ: www.habr.com