ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืกื’ื ื•ืŸ BPM

ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืกื’ื ื•ืŸ BPM

ะŸั€ะธะฒะตั‚, ื”ืื‘ืจ!

ื—ื‘ืจืชื ื• ืžืชืžื—ื” ื‘ืคื™ืชื•ื— ืคืชืจื•ื ื•ืช ืชื•ื›ื ื” ื‘ืจืžื” ืฉืœ ERP, ื‘ื”ื ื—ืœืง ื”ืืจื™ ื ืชืคืก ืขืœ ื™ื“ื™ ืžืขืจื›ื•ืช ื˜ืจื ื–ืงืฆื™ื•ืช ืขื ื›ืžื•ืช ืขืฆื•ืžื” ืฉืœ ื”ื™ื’ื™ื•ืŸ ืขืกืงื™ ื•ื–ืจื™ืžืช ืขื‘ื•ื“ื” a la EDMS. ื’ืจืกืื•ืช ืžื•ื“ืจื ื™ื•ืช ืฉืœ ื”ืžื•ืฆืจื™ื ืฉืœื ื• ืžื‘ื•ืกืกื•ืช ืขืœ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช JavaEE, ืืš ืื ื• ื’ื ืžืชื ืกื™ื ื‘ืื•ืคืŸ ืคืขื™ืœ ื‘ืฉื™ืจื•ืชื™ ืžื™ืงืจื•. ืื—ื“ ื”ืชื—ื•ืžื™ื ื”ื‘ืขื™ื™ืชื™ื™ื ื‘ื™ื•ืชืจ ืฉืœ ืคืชืจื•ื ื•ืช ื›ืืœื” ื”ื•ื ืฉื™ืœื•ื‘ ืฉืœ ืชืช-ืžืขืจื›ื•ืช ืฉื•ื ื•ืช ื”ืงืฉื•ืจื•ืช ืœืชื—ื•ืžื™ื ืกืžื•ื›ื™ื. ืžืฉื™ืžื•ืช ื”ืื™ื ื˜ื’ืจืฆื™ื” ืชืžื™ื“ ืขืฉื• ืœื ื• ื›ืื‘ ืจืืฉ ืขืฆื•ื, ืœืœื ืงืฉืจ ืœืกื’ื ื•ื ื•ืช ื”ืื“ืจื™ื›ืœื™ื™ื, ืขืจื™ืžื•ืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ื•ื”ืžืกื’ืจื•ืช ืฉื‘ื”ืŸ ืื ื• ืžืฉืชืžืฉื™ื, ืืš ืœืื—ืจื•ื ื” ื—ืœื” ื”ืชืงื“ืžื•ืช ื‘ืคืชืจื•ืŸ ื‘ืขื™ื•ืช ื›ืืœื”.

ื‘ืžืืžืจ ืฉื”ื•ื‘ื ืœื™ื“ื™ืขืชื›ื, ืื“ื‘ืจ ืขืœ ื”ื ื™ืกื™ื•ืŸ ื•ื”ืžื—ืงืจ ื”ืื“ืจื™ื›ืœื™ ืฉืœ NPO Krista ื‘ืื–ื•ืจ ื”ืžื™ื•ืขื“. ื›ืžื• ื›ืŸ, ื ืฉืงื•ืœ ื“ื•ื’ืžื” ืœืคืชืจื•ืŸ ืคืฉื•ื˜ ืœื‘ืขื™ื™ืช ืื™ื ื˜ื’ืจืฆื™ื” ืžื ืงื•ื“ืช ืžื‘ื˜ื• ืฉืœ ืžืคืชื— ืืคืœื™ืงืฆื™ื•ืช ื•ื ื‘ืจืจ ืžื” ืžืกืชืชืจ ืžืื—ื•ืจื™ ื”ืคืฉื˜ื•ืช ื”ื–ื•.

ื›ืชื‘ ื•ื™ืชื•ืจ

ื”ืคืชืจื•ื ื•ืช ื”ืื“ืจื™ื›ืœื™ื™ื ื•ื”ื˜ื›ื ื™ื™ื ื”ืžืชื•ืืจื™ื ื‘ืžืืžืจ ืžื•ืฆืขื™ื ืขืœ ื™ื“ื™ ืขืœ ืกืžืš ื ื™ืกื™ื•ืŸ ืื™ืฉื™ ื‘ื”ืงืฉืจ ืฉืœ ืžืฉื™ืžื•ืช ืกืคืฆื™ืคื™ื•ืช. ืคืชืจื•ื ื•ืช ืืœื• ืื™ื ื ืžืชื™ื™ืžืจื™ื ืœื”ื™ื•ืช ืื•ื ื™ื‘ืจืกืœื™ื™ื ื•ื™ื™ืชื›ืŸ ืฉืœื ื™ื”ื™ื• ืื•ืคื˜ื™ืžืœื™ื™ื ื‘ืชื ืื™ ืฉื™ืžื•ืฉ ืื—ืจื™ื.

ืžื” ื”ืงืฉืจ ืœ-BPM?

ื›ื“ื™ ืœืขื ื•ืช ืขืœ ืฉืืœื” ื–ื•, ืขืœื™ื ื• ืœื”ืชืขืžืง ืžืขื˜ ื‘ืคืจื˜ื™ื ื”ืกืคืฆื™ืคื™ื™ื ืฉืœ ื”ื‘ืขื™ื•ืช ื”ื™ื™ืฉื•ืžื™ื•ืช ืฉืœ ื”ืคืชืจื•ื ื•ืช ืฉืœื ื•. ื”ื—ืœืง ื”ืขื™ืงืจื™ ืฉืœ ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื‘ืžืขืจื›ืช ื”ืขืกืงืื•ืช ื”ื˜ื™ืคื•ืกื™ืช ืฉืœื ื• ื”ื•ื ื”ื–ื ืช ื ืชื•ื ื™ื ืœืžืกื“ ื”ื ืชื•ื ื™ื ื“ืจืš ืžืžืฉืงื™ ืžืฉืชืžืฉ, ื‘ื“ื™ืงื” ื™ื“ื ื™ืช ื•ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ื ืชื•ื ื™ื ืืœื•, ื”ืขื‘ืจืชื ื“ืจืš ื–ืจื™ืžืช ืขื‘ื•ื“ื” ื›ืœืฉื”ื™, ืคืจืกื•ืžื ืœืžืขืจื›ืช ืื—ืจืช / ืžืกื“ ื ืชื•ื ื™ื ืื ืœื™ื˜ื™ / ืืจื›ื™ื•ืŸ, ื”ืคืงืช ื“ื•ื—ื•ืช. ืœืคื™ื›ืš, ืชืคืงื™ื“ื” ื”ืžืจื›ื–ื™ ืฉืœ ื”ืžืขืจื›ืช ืขื‘ื•ืจ ื”ืœืงื•ื—ื•ืช ื”ื•ื ืื•ื˜ื•ืžืฆื™ื” ืฉืœ ื”ืชื”ืœื™ื›ื™ื ื”ืขืกืงื™ื™ื ื”ืคื ื™ืžื™ื™ื ืฉืœื”ื.

ืžื˜ืขืžื™ ื ื•ื—ื•ืช, ืื ื• ืžืฉืชืžืฉื™ื ื‘ืžื•ื ื— "ืžืกืžืš" ื‘ืชืงืฉื•ืจืช ื›ื”ืคืฉื˜ื” ื›ืœืฉื”ื™ ืฉืœ ืžืขืจืš ื ืชื•ื ื™ื, ื”ืžืื•ื—ื“ ืขืœ ื™ื“ื™ ืžืคืชื— ืžืฉื•ืชืฃ, ืฉืืœื™ื• ื ื™ืชืŸ "ืœืฆืจืฃ ื–ืจื™ืžืช ืขื‘ื•ื“ื” ืžืกื•ื™ืžืช".
ืื‘ืœ ืžื” ืขื ื”ื™ื’ื™ื•ืŸ ื”ืื™ื ื˜ื’ืจืฆื™ื”? ืื—ืจื™ ื”ื›ืœ, ืžืฉื™ืžืช ื”ืื™ื ื˜ื’ืจืฆื™ื” ื ื•ืฆืจืช ืขืœ ื™ื“ื™ ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืžืขืจื›ืช, ืืฉืจ "ืžื ื•ืกืจืช" ืœื—ืœืงื™ื ืœื ืœืคื™ ื‘ืงืฉืช ื”ืœืงื•ื—, ืืœื ื‘ื”ืฉืคืขืช ื’ื•ืจืžื™ื ืฉื•ื ื™ื ืœื—ืœื•ื˜ื™ืŸ:

  • ื‘ื”ืฉืคืขืช ื—ื•ืง ืงื•ื ื•ื•ื™;
  • ื›ืชื•ืฆืื” ืžืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืชืชื™ ืžืขืจื›ื•ืช ืฉืคื•ืชื—ื• ื‘ืขื‘ืจ ืขื‘ื•ืจ ืžื•ืฆืจื™ื ืื—ืจื™ื;
  • ืœืคื™ ื”ื—ืœื˜ืช ื”ืื“ืจื™ื›ืœ, ื‘ื”ืชื‘ืกืก ืขืœ ื“ืจื™ืฉื•ืช ืœื ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช.

ื™ืฉ ืคื™ืชื•ื™ ื’ื“ื•ืœ ืœื”ืคืจื™ื“ ืืช ื”ืœื•ื’ื™ืงื” ืฉืœ ื”ืื™ื ื˜ื’ืจืฆื™ื” ืžื”ืœื•ื’ื™ืงื” ื”ืขืกืงื™ืช ืฉืœ ื–ืจื™ืžืช ื”ืขื‘ื•ื“ื” ื”ืจืืฉื™ืช ื›ื“ื™ ืœื ืœื–ื”ื ืืช ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื‘ื—ืคืฆื™ ืื™ื ื˜ื’ืจืฆื™ื” ื•ืœื—ืกื•ืš ืžืžืคืชื— ื”ืืคืœื™ืงืฆื™ื” ืืช ื”ืฆื•ืจืš ืœื”ืชืขืžืง ื‘ืžื•ื–ืจื•ื™ื•ืช ื”ื ื•ืฃ ื”ืื“ืจื™ื›ืœื™ ืฉืœ ื”ืžืขืจื›ืช. ืœื’ื™ืฉื” ื–ื• ื™ืฉ ืžืกืคืจ ื™ืชืจื•ื ื•ืช, ืืš ื”ืชืจื’ื•ืœ ืžืจืื” ืืช ื—ื•ืกืจ ื”ื™ืขื™ืœื•ืช ืฉืœื”:

  • ืคืชืจื•ืŸ ื‘ืขื™ื•ืช ืื™ื ื˜ื’ืจืฆื™ื” ื’ื•ืœืฉ ื‘ื“ืจืš ื›ืœืœ ืœืืคืฉืจื•ื™ื•ืช ื”ืคืฉื•ื˜ื•ืช ื‘ื™ื•ืชืจ ื‘ืฆื•ืจื” ืฉืœ ืฉื™ื—ื•ืช ืกื™ื ื›ืจื•ื ื™ื•ืช ื‘ืฉืœ ื ืงื•ื“ื•ืช ื”ื”ืจื—ื‘ื” ื”ืžื•ื’ื‘ืœื•ืช ื‘ื™ื™ืฉื•ื ื–ืจื™ืžืช ื”ืขื‘ื•ื“ื” ื”ืจืืฉื™ืช (ืขื•ื“ ืขืœ ื”ื—ืกืจื•ื ื•ืช ืฉืœ ื”ืื™ื ื˜ื’ืจืฆื™ื” ื”ืกื™ื ื›ืจื•ื ื™ืช ื‘ื”ืžืฉืš);
  • ื—ืคืฆื™ ืื™ื ื˜ื’ืจืฆื™ื” ืขื“ื™ื™ืŸ ื—ื•ื“ืจื™ื ืœื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื”ืขื™ืงืจื™ ื›ืืฉืจ ื ื“ืจืฉ ืžืฉื•ื‘ ืžืชืช-ืžืขืจื›ืช ืื—ืจืช;
  • ืžืคืชื— ื”ืืคืœื™ืงืฆื™ื” ืžืชืขืœื ืžื”ืฉื™ืœื•ื‘ ื•ื™ื›ื•ืœ ืœืฉื‘ื•ืจ ืื•ืชื• ื‘ืงืœื•ืช ืขืœ ื™ื“ื™ ืฉื™ื ื•ื™ ื–ืจื™ืžืช ื”ืขื‘ื•ื“ื”;
  • ื”ืžืขืจื›ืช ืžืคืกื™ืงื” ืœื”ื™ื•ืช ืฉืœื ืื—ื“ ืžื ืงื•ื“ืช ืžื‘ื˜ื• ืฉืœ ื”ืžืฉืชืžืฉ, "ืชืคืจื™ื" ื‘ื™ืŸ ืชืช-ืžืขืจื›ื•ืช ื”ื•ืคื›ื™ื ื‘ื•ืœื˜ื™ื, ืžื•ืคื™ืขื•ืช ืคืขื•ืœื•ืช ืžืฉืชืžืฉ ืžื™ื•ืชืจื•ืช ืฉืžืชื ื™ืขื•ืช ื”ืขื‘ืจืช ื ืชื•ื ื™ื ืžืชืช-ืžืขืจื›ืช ืื—ืช ืœืื—ืจืช.

ื’ื™ืฉื” ื ื•ืกืคืช ื”ื™ื ืœืฉืงื•ืœ ืื™ื ื˜ืจืืงืฆื™ื•ืช ืื™ื ื˜ื’ืจืฆื™ื” ื›ื—ืœืง ื‘ืœืชื™ ื ืคืจื“ ืžื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื•ื–ืจื™ืžืช ื”ืขื‘ื•ื“ื” ื”ืœื™ื‘ื”. ื›ื“ื™ ืœืžื ื•ืข ืžื“ืจื™ืฉื•ืช ื”ืžื™ื•ืžื ื•ืช ืฉืœ ืžืคืชื—ื™ ืืคืœื™ืงืฆื™ื•ืช ืœื”ืจืงื™ืข ืฉื—ืงื™ื, ื™ืฆื™ืจืช ืื™ื ื˜ืจืืงืฆื™ื•ืช ืื™ื ื˜ื’ืจืฆื™ื” ื—ื“ืฉื•ืช ืฆืจื™ื›ื” ืœื”ื™ืขืฉื•ืช ื‘ืงืœื•ืช ื•ื‘ื˜ื‘ืขื™ื•ืช, ืขื ืืคืฉืจื•ื™ื•ืช ืžื™ื ื™ืžืœื™ื•ืช ืœื‘ื—ื™ืจืช ืคืชืจื•ืŸ. ื–ื” ืงืฉื” ื™ื•ืชืจ ืžืžื” ืฉื–ื” ื ืจืื”: ื”ื›ืœื™ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื—ื–ืง ืžืกืคื™ืง ื›ื“ื™ ืœืกืคืง ืœืžืฉืชืžืฉ ืืช ืžื’ื•ื•ืŸ ื”ืืคืฉืจื•ื™ื•ืช ื”ื“ืจื•ืฉ ืœืฉื™ืžื•ืฉ ื‘ื• ื•ื‘ื• ื‘ื–ืžืŸ ืœื ืœืืคืฉืจ ืœืขืฆืžื ืœื™ืจื•ืช ื‘ืจื’ืœ. ื™ืฉื ืŸ ืฉืืœื•ืช ืจื‘ื•ืช ืฉืขืœ ืžื”ื ื“ืก ืœืขื ื•ืช ืขืœื™ื”ืŸ ื‘ื”ืงืฉืจ ืฉืœ ืžืฉื™ืžื•ืช ืื™ื ื˜ื’ืจืฆื™ื”, ืืš ืžืคืชื— ื™ื™ืฉื•ืžื™ื ืœื ืฆืจื™ืš ืœื—ืฉื•ื‘ ืขืœื™ื”ืŸ ื‘ืขื‘ื•ื“ืชื• ื”ื™ื•ืžื™ื•ืžื™ืช: ื’ื‘ื•ืœื•ืช ืขืกืงืื•ืช, ืขืงื‘ื™ื•ืช, ืื˜ื•ืžื™ื•ืช, ืื‘ื˜ื—ื”, ืงื ื” ืžื™ื“ื”, ื—ืœื•ืงืช ืขื•ืžืกื™ื ื•ืžืฉืื‘ื™ื, ื ื™ืชื•ื‘, ืžืืจืกื™ื ื’, ื”ืคืฆื” ื•ื”ืงืฉืจื™ ืžื™ืชื•ื’ ื•ื›ื•' ื™ืฉ ืฆื•ืจืš ืœื”ืฆื™ืข ืœืžืคืชื—ื™ ืืคืœื™ืงืฆื™ื•ืช ืชื‘ื ื™ื•ืช ื”ื—ืœื˜ื” ืคืฉื•ื˜ื•ืช ืœืžื“ื™, ืฉื‘ื”ืŸ ื›ื‘ืจ ื—ื‘ื•ื™ื•ืช ืชืฉื•ื‘ื•ืช ืœื›ืœ ื”ืฉืืœื•ืช ื”ืœืœื•. ื“ืคื•ืกื™ื ืืœื” ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ื‘ื˜ื•ื—ื™ื ืžืกืคื™ืง: ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืžืฉืชื ื” ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืžืื•ื“, ืžื” ืฉืžื’ื‘ื™ืจ ืืช ื”ืกื™ื›ื•ืŸ ืœื”ื—ื“ืจืช ืฉื’ื™ืื•ืช, ืขืœื•ืช ื”ื˜ืขื•ื™ื•ืช ืฆืจื™ื›ื” ืœื”ื™ืฉืืจ ื‘ืจืžื” ื ืžื•ื›ื” ืœืžื“ื™.

ืื‘ืœ ื‘ื›ืœ ื–ืืช, ืžื” ื”ืงืฉืจ ืœ-BPM? ื™ืฉื ืŸ ืืคืฉืจื•ื™ื•ืช ืจื‘ื•ืช ืœื™ื™ืฉื•ื ื–ืจื™ืžืช ืขื‘ื•ื“ื”...
ื•ืื›ืŸ, ื”ื˜ืžืขื” ื ื•ืกืคืช ืฉืœ ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืคื•ืคื•ืœืจื™ืช ืžืื•ื“ ื‘ืคืชืจื•ื ื•ืช ืฉืœื ื• - ื“ืจืš ื”ื”ื’ื“ืจื” ื”ื”ืฆื”ืจืชื™ืช ืฉืœ ื“ื™ืื’ืจืžืช ืžืขื‘ืจ ื”ืžืฆื‘ ื•ื—ื™ื‘ื•ืจ ืžื˜ืคืœื™ื ืขื ื”ื™ื’ื™ื•ืŸ ืขืกืงื™ ืœืžืขื‘ืจื™ื. ื™ื—ื“ ืขื ื–ืืช, ื”ืžื“ื™ื ื” ื”ืงื•ื‘ืขืช ืืช ืžื™ืงื•ืžื• ื”ื ื•ื›ื—ื™ ืฉืœ ื”"ืžืกืžืš" ื‘ืชื”ืœื™ืš ื”ืขืกืงื™ ื”ื™ื ืชื›ื•ื ื” ืฉืœ ื”"ืžืกืžืš" ืขืฆืžื•.

ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืกื’ื ื•ืŸ BPM
ื›ืš ื ืจืื” ื”ืชื”ืœื™ืš ื‘ืชื—ื™ืœืช ื”ืคืจื•ื™ืงื˜

ื”ืคื•ืคื•ืœืจื™ื•ืช ืฉืœ ื™ื™ืฉื•ื ื›ื–ื” ื ื•ื‘ืขืช ืžื”ืคืฉื˜ื•ืช ื•ื”ืžื”ื™ืจื•ืช ื”ื™ื—ืกื™ืช ืฉืœ ื™ืฆื™ืจืช ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืœื™ื ื™ืืจื™ื™ื. ืขื ื–ืืช, ื›ื›ืœ ืฉืžืขืจื›ื•ืช ื”ืชื•ื›ื ื” ื”ื•ืคื›ื•ืช ืžื•ืจื›ื‘ื•ืช ื™ื•ืชืจ, ื”ื—ืœืง ื”ืื•ื˜ื•ืžื˜ื™ ื‘ืชื”ืœื™ืš ื”ืขืกืงื™ ื’ื“ืœ ื•ื”ื•ืคืš ืžื•ืจื›ื‘ ื™ื•ืชืจ. ื™ืฉ ืฆื•ืจืš ื‘ืคื™ืจื•ืง, ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ื—ืœืงื™ ืชื”ืœื™ื›ื™ื ื•ื›ืŸ ืชื”ืœื™ื›ื™ ื”ืชืคืฆืœื•ืช ื›ืš ืฉื›ืœ ืขื ืฃ ืžื‘ื•ืฆืข ื‘ืžืงื‘ื™ืœ. ื‘ืชื ืื™ื ื›ืืœื”, ื”ื›ืœื™ ื”ื•ืคืš ืœื ื ื•ื—, ื•ืชืจืฉื™ื ืžืขื‘ืจ ื”ืžืฆื‘ ืžืื‘ื“ ืืช ืชื•ื›ืŸ ื”ืžื™ื“ืข ืฉืœื• (ืื™ื ื˜ืจืืงืฆื™ื•ืช ืื™ื ื˜ื’ืจืฆื™ื” ืื™ื ืŸ ืžืฉืชืงืคื•ืช ื‘ืชืจืฉื™ื ื›ืœืœ).

ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืกื’ื ื•ืŸ BPM
ื›ืš ื ืจืื” ื”ืชื”ืœื™ืš ืœืื—ืจ ืžืกืคืจ ืื™ื˜ืจืฆื™ื•ืช ืฉืœ ื‘ื™ืจื•ืจ ื”ื“ืจื™ืฉื•ืช

ื”ื“ืจืš ืœืฆืืช ืžื”ืžืฆื‘ ื”ื–ื” ื”ื™ื™ืชื” ืฉื™ืœื•ื‘ ื”ืžื ื•ืข jBPM ืœื—ืœืง ืžื”ืžื•ืฆืจื™ื ืขื ื”ืชื”ืœื™ื›ื™ื ื”ืขืกืงื™ื™ื ื”ืžื•ืจื›ื‘ื™ื ื‘ื™ื•ืชืจ. ื‘ื˜ื•ื•ื— ื”ืงืฆืจ, ืคืชืจื•ืŸ ื–ื” ื ื—ืœ ื”ืฆืœื—ื” ืžืกื•ื™ืžืช: ื ื™ืชืŸ ื”ื™ื” ืœื™ื™ืฉื ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืžื•ืจื›ื‘ื™ื ืชื•ืš ืฉืžื™ืจื” ืขืœ ื“ื™ืื’ืจืžื” ืื™ื ืคื•ืจืžื˜ื™ื‘ื™ืช ื•ืขื“ื›ื ื™ืช ืœืžื“ื™ ื‘ืกื™ืžื•ืŸ BPMN2.

ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืกื’ื ื•ืŸ BPM
ื—ืœืง ืงื˜ืŸ ืžืชื”ืœื™ืš ืขืกืงื™ ืžื•ืจื›ื‘

ื‘ื˜ื•ื•ื— ื”ืืจื•ืš, ื”ืคืชืจื•ืŸ ืœื ืขืžื“ ื‘ืฆื™ืคื™ื•ืช: ืขื•ืฆืžืช ื”ืขื‘ื•ื“ื” ื”ื’ื‘ื•ื”ื” ืฉืœ ื™ืฆื™ืจืช ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ื‘ืืžืฆืขื•ืช ื›ืœื™ื ื•ื™ื–ื•ืืœื™ื™ื ืœื ืืคืฉืจื” ื”ืฉื’ืช ืžื“ื“ื™ ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช ืžืงื•ื‘ืœื™ื, ื•ื”ื›ืœื™ ืขืฆืžื• ื”ืคืš ืœืื—ื“ ื”ืกื•ืœื“ื™ื ื‘ื™ื•ืชืจ ื‘ืงืจื‘ ื”ืžืคืชื—ื™ื. ื”ื™ื• ื’ื ืชืœื•ื ื•ืช ืขืœ ื”ืžื‘ื ื” ื”ืคื ื™ืžื™ ืฉืœ ื”ืžื ื•ืข, ืžื” ืฉื”ื•ื‘ื™ืœ ืœื”ื•ืคืขืช "ื˜ืœืื™ื" ื•"ืงื‘ื™ื™ื" ืจื‘ื™ื.

ื”ื”ื™ื‘ื˜ ื”ื—ื™ื•ื‘ื™ ื”ืขื™ืงืจื™ ื‘ืฉื™ืžื•ืฉ ื‘-jBPM ื”ื™ื” ืžื™ืžื•ืฉ ื”ื™ืชืจื•ื ื•ืช ื•ื”ื ื–ืงื™ื ืฉืœ ืžืฆื‘ ืžืชืžืฉืš ืžืฉืœื• ืขื‘ื•ืจ ืžื•ืคืข ืฉืœ ืชื”ืœื™ืš ืขืกืงื™. ืจืื™ื ื• ื’ื ืืช ื”ืืคืฉืจื•ืช ืœื”ืฉืชืžืฉ ื‘ื’ื™ืฉืช ืชื”ืœื™ืš ืœื™ื™ืฉื•ื ืคืจื•ื˜ื•ืงื•ืœื™ ืื™ื ื˜ื’ืจืฆื™ื” ืžื•ืจื›ื‘ื™ื ื‘ื™ืŸ ื™ื™ืฉื•ืžื™ื ืฉื•ื ื™ื ืชื•ืš ืฉื™ืžื•ืฉ ื‘ืื™ื ื˜ืจืืงืฆื™ื•ืช ื-ืกื™ื ื›ืจื•ื ื™ื•ืช ื‘ืืžืฆืขื•ืช ืื•ืชื•ืช ื•ื”ื•ื“ืขื•ืช. ื ื•ื›ื—ื•ืช ืฉืœ ืžืฆื‘ ืžืชืžืฉืš ืžืฉื—ืงืช ืชืคืงื™ื“ ืžื›ืจื™ืข ื‘ื›ืš.

ื‘ื”ืชื‘ืกืก ืขืœ ื”ืืžื•ืจ ืœืขื™ืœ, ื ื•ื›ืœ ืœื”ืกื™ืง: ื’ื™ืฉืช ื”ืชื”ืœื™ืš ื‘ืกื’ื ื•ืŸ BPM ืžืืคืฉืจืช ืœื ื• ืœืคืชื•ืจ ืžื’ื•ื•ืŸ ืจื—ื‘ ืฉืœ ืžืฉื™ืžื•ืช ืœืื•ื˜ื•ืžืฆื™ื” ืฉืœ ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืžื•ืจื›ื‘ื™ื ื™ื•ืชืจ ื•ื™ื•ืชืจ, ืœื”ืชืื™ื ื‘ืื•ืคืŸ ื”ืจืžื•ื ื™ ืคืขื™ืœื•ื™ื•ืช ืื™ื ื˜ื’ืจืฆื™ื” ืœืชื”ืœื™ื›ื™ื ืืœื• ื•ืœืฉืžื•ืจ ืขืœ ื”ื™ื›ื•ืœืช ืœื”ืฆื™ื’ ื—ื–ื•ืชื™ืช ืืช ื”ืชื”ืœื™ืš ื”ืžื™ื•ืฉื ื‘ืกื™ืžื•ืŸ ืžืชืื™ื.

ื—ืกืจื•ื ื•ืช ืฉืœ ืฉื™ื—ื•ืช ืกื™ื ื›ืจื•ื ื™ื•ืช ื›ื“ืคื•ืก ืื™ื ื˜ื’ืจืฆื™ื”

ืื™ื ื˜ื’ืจืฆื™ื” ืกื™ื ื›ืจื•ื ื™ืช ืžืชื™ื™ื—ืกืช ืœืฉื™ื—ืช ื”ื—ืกื™ืžื” ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ. ืชืช-ืžืขืจื›ืช ืื—ืช ืคื•ืขืœืช ื›ืฆื“ ื”ืฉืจืช ื•ื—ื•ืฉืคืช ืืช ื”-API ื‘ืฉื™ื˜ื” ื”ืจืฆื•ื™ื”. ืชืช-ืžืขืจื›ืช ืื—ืจืช ืคื•ืขืœืช ื›ืฆื“ ืœืงื•ื— ื•ื‘ื–ืžืŸ ื”ื ื›ื•ืŸ ืžืชืงืฉืจืช ืขื ืฆื™ืคื™ื™ื” ืœืชื•ืฆืื”. ื‘ื”ืชืื ืœืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืžืขืจื›ืช, ื ื™ืชืŸ ืœืืจื— ืืช ืฆื“ ื”ืœืงื•ื— ื•ื”ืฉืจืช ืื• ื‘ืื•ืชื• ื™ื™ืฉื•ื ื•ืชื”ืœื™ืš, ืื• ื‘ืืœื” ืฉื•ื ื™ื. ื‘ืžืงืจื” ื”ืฉื ื™, ืขืœื™ืš ืœื™ื™ืฉื ื™ื™ืฉื•ื ืžืกื•ื™ื ืฉืœ RPC ื•ืœืกืคืง ืืจื’ื•ืŸ ืฉืœ ื”ืคืจืžื˜ืจื™ื ื•ืชื•ืฆืืช ื”ืฉื™ื—ื”.

ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืกื’ื ื•ืŸ BPM

ืœื“ืคื•ืก ืื™ื ื˜ื’ืจืฆื™ื” ื›ื–ื” ื™ืฉ ืงื‘ื•ืฆื” ื“ื™ ื’ื“ื•ืœื” ืฉืœ ื—ืกืจื•ื ื•ืช, ืื‘ืœ ื”ื•ื ื ืžืฆื ื‘ืฉื™ืžื•ืฉ ื ืจื—ื‘ ืžืื•ื“ ื‘ืคื•ืขืœ ื‘ื’ืœืœ ื”ืคืฉื˜ื•ืช ืฉืœื•. ืžื”ื™ืจื•ืช ื”ื™ื™ืฉื•ื ื›ื•ื‘ืฉืช ื•ื’ื•ืจืžืช ืœืš ืœื™ื™ืฉื ืื•ืชื• ืฉื•ื‘ ื•ืฉื•ื‘ ื‘ืชื ืื™ื ืฉืœ ืžื•ืขื“ื™ื "ืฉื•ืจืคื™ื", ื›ืชื™ื‘ืช ื”ืคืชืจื•ืŸ ืœื—ื•ื‘ื•ืช ื˜ื›ื ื™ื™ื. ืื‘ืœ ืงื•ืจื” ื’ื ืฉืžืคืชื—ื™ื ืœื ืžื ื•ืกื™ื ืžืฉืชืžืฉื™ื ื‘ื–ื” ื‘ืื•ืคืŸ ืœื ืžื•ื“ืข, ืคืฉื•ื˜ ืœื ืžื‘ื™ื ื™ื ืืช ื”ื”ืฉืœื›ื•ืช ื”ืฉืœื™ืœื™ื•ืช.

ื‘ื ื•ืกืฃ ืœืขืœื™ื™ื” ื”ื‘ืจื•ืจื” ื‘ื™ื•ืชืจ ื‘ืงื™ืฉื•ืจื™ื•ืช ืฉืœ ืชืช-ืžืขืจื›ื•ืช, ื™ืฉื ืŸ ื‘ืขื™ื•ืช ืคื—ื•ืช ื‘ืจื•ืจื•ืช ืขื "ื”ืชืคืฉื˜ื•ืช" ื•"ืžืชื™ื—ื”" ืฉืœ ืขืกืงืื•ืช. ื•ืื›ืŸ, ืื ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืžื‘ืฆืข ืฉื™ื ื•ื™ื™ื ื›ืœืฉื”ื, ืขืกืงืื•ืช ื”ืŸ ื”ื›ืจื—ื™ื•ืช, ื•ืขืกืงืื•ืช, ื‘ืชื•ืจืŸ, ื ื•ืขืœื•ืช ืžืฉืื‘ื™ ื™ื™ืฉื•ืžื™ื ืžืกื•ื™ืžื™ื ื”ืžื•ืฉืคืขื™ื ืžืฉื™ื ื•ื™ื™ื ืืœื”. ื›ืœื•ืžืจ, ืขื“ ืฉืชืช-ืžืขืจื›ืช ืื—ืช ืชื—ื›ื” ืœืชื’ื•ื‘ื” ืžืื—ืจืช, ื”ื™ื ืœื ืชื•ื›ืœ ืœื”ืฉืœื™ื ืืช ื”ืขืกืงื” ื•ืœืฉื—ืจืจ ืžื ืขื•ืœื™ื. ื–ื” ืžื’ื“ื™ืœ ื‘ืื•ืคืŸ ืžืฉืžืขื•ืชื™ ืืช ื”ืกื™ื›ื•ืŸ ืœืžื’ื•ื•ืŸ ืชื•ืคืขื•ืช:

  • ื”ื™ืขื ื•ืช ื”ืžืขืจื›ืช ืื•ื‘ื“ืช, ืžืฉืชืžืฉื™ื ืžื—ื›ื™ื ื–ืžืŸ ืจื‘ ืœืชืฉื•ื‘ื•ืช ืœื‘ืงืฉื•ืช;
  • ื”ืฉืจืช ื‘ื“ืจืš ื›ืœืœ ืžืคืกื™ืง ืœื”ื’ื™ื‘ ืœื‘ืงืฉื•ืช ืžืฉืชืžืฉื™ื ืขืงื‘ ืžืื’ืจ ืฉืจืฉื•ืจื™ื ืฉืขื•ืœื” ืขืœ ื’ื“ื•ืชื™ื•: ืจื•ื‘ ื”ืฉืจืฉื•ืจื™ื "ื ื™ืฆื‘ื™ื" ืขืœ ื”ืžื ืขื•ืœ ืฉืœ ื”ืžืฉืื‘ ืฉื ื›ื‘ืฉ ืขืœ ื™ื“ื™ ื”ืขืกืงื”;
  • ืžืชื—ื™ืœื•ืช ืœื”ื•ืคื™ืข ืžื‘ื•ื™ ืกืชื•ื: ื”ื”ืกืชื‘ืจื•ืช ืœื”ืชืจื—ืฉื•ืชืŸ ืชืœื•ื™ื” ืžืื•ื“ ื‘ืžืฉืš ื”ืขืกืงืื•ืช, ื‘ื›ืžื•ืช ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื•ื”ืžื ืขื•ืœื™ื ื”ื›ืจื•ื›ื™ื ื‘ืขืกืงื”;
  • ืžื•ืคื™ืขื•ืช ืฉื’ื™ืื•ืช ืชืคื•ื’ืช ื–ืžืŸ ืงืฆื•ื‘ ืขืกืงื”;
  • ื”ืฉืจืช "ื ื•ืคืœ" ืขืœ OutOfMemory ืื ื”ืžืฉื™ืžื” ื“ื•ืจืฉืช ืขื™ื‘ื•ื“ ื•ืฉื™ื ื•ื™ ื›ืžื•ื™ื•ืช ื’ื“ื•ืœื•ืช ืฉืœ ื ืชื•ื ื™ื, ื•ื”ื ื•ื›ื—ื•ืช ืฉืœ ืื™ื ื˜ื’ืจืฆื™ื•ืช ืกื™ื ื›ืจื•ื ื™ื•ืช ืžืงืฉื” ืžืื•ื“ ืขืœ ืคื™ืฆื•ืœ ื”ืขื™ื‘ื•ื“ ืœืขืกืงืื•ืช "ืงืœื•ืช" ื™ื•ืชืจ.

ืžื ืงื•ื“ืช ืžื‘ื˜ ืืจื›ื™ื˜ืงื˜ื•ื ื™ืช, ื”ืฉื™ืžื•ืฉ ื‘ื—ืกื™ืžืช ืฉื™ื—ื•ืช ื‘ืžื”ืœืš ื”ืื™ื ื˜ื’ืจืฆื™ื” ืžื•ื‘ื™ืœ ืœืื•ื‘ื“ืŸ ื‘ืงืจืช ืื™ื›ื•ืช ืฉืœ ืชืช-ืžืขืจื›ื•ืช ื‘ื•ื“ื“ื•ืช: ืื™ ืืคืฉืจ ืœื”ื‘ื˜ื™ื— ืืช ื™ืขื“ื™ ื”ืื™ื›ื•ืช ืฉืœ ืชืช-ืžืขืจื›ืช ืื—ืช ื‘ืžื ื•ืชืง ืžื™ืขื“ื™ ื”ืื™ื›ื•ืช ืฉืœ ืชืช-ืžืขืจื›ืช ืื—ืจืช. ืื ืชืช-ืžืขืจื›ื•ืช ืžืคื•ืชื—ื•ืช ืขืœ ื™ื“ื™ ืฆื•ื•ืชื™ื ืฉื•ื ื™ื, ื–ื• ื‘ืขื™ื” ื’ื“ื•ืœื”.

ื”ื“ื‘ืจื™ื ื ืขืฉื™ื ืžืขื ื™ื™ื ื™ื ืืคื™ืœื• ื™ื•ืชืจ ืื ืชืช-ื”ืžืขืจื›ื•ืช ื”ืžืฉื•ืœื‘ื•ืช ื ืžืฆืื•ืช ื‘ื™ื™ืฉื•ืžื™ื ืฉื•ื ื™ื ื•ื™ืฉ ืฆื•ืจืš ืœื‘ืฆืข ืฉื™ื ื•ื™ื™ื ืกื™ื ื›ืจื•ื ื™ื™ื ืžืฉื ื™ ื”ืฆื“ื“ื™ื. ื›ื™ืฆื“ ืœื”ืคื•ืš ืืช ื”ืฉื™ื ื•ื™ื™ื ื”ืœืœื• ืœืขืกืงืื•ืช?

ืื ื™ื‘ื•ืฆืขื• ืฉื™ื ื•ื™ื™ื ื‘ืขืกืงืื•ืช ื ืคืจื“ื•ืช, ื™ื”ื™ื” ืฆื•ืจืš ืœืกืคืง ื˜ื™ืคื•ืœ ื—ืจื™ื’ ื•ืคื™ืฆื•ื™ ื—ื–ืง, ื•ื–ื” ืžื‘ื˜ืœ ืœื—ืœื•ื˜ื™ืŸ ืืช ื”ื™ืชืจื•ืŸ ื”ืขื™ืงืจื™ ืฉืœ ืื™ื ื˜ื’ืจืฆื™ื•ืช ืกื™ื ื›ืจื•ื ื™ื•ืช - ืคืฉื˜ื•ืช.

ื’ื ืขืกืงืื•ืช ืžื‘ื•ื–ืจื•ืช ืขื•ืœื•ืช ื‘ืจืืฉ, ืื‘ืœ ืื ื—ื ื• ืœื ืžืฉืชืžืฉื™ื ื‘ื”ืŸ ื‘ืคืชืจื•ื ื•ืช ืฉืœื ื•: ืงืฉื” ืœื”ื‘ื˜ื™ื— ืืžื™ื ื•ืช.

"ืกืื’ื”" ื›ืคืชืจื•ืŸ ืœื‘ืขื™ื™ืช ื”ืขืกืงืื•ืช

ืขื ื”ืคื•ืคื•ืœืจื™ื•ืช ื”ื’ื•ื‘ืจืช ืฉืœ ืฉื™ืจื•ืชื™ ืžื™ืงืจื•, ื™ืฉ ื‘ื™ืงื•ืฉ ื”ื•ืœืš ื•ื’ื•ื‘ืจ ืขื‘ื•ืจ ื“ืคื•ืก ืกืื’ื”.

ื“ืคื•ืก ื–ื” ืคื•ืชืจ ื‘ืฆื•ืจื” ืžื•ืฉืœืžืช ืืช ื”ื‘ืขื™ื•ืช ื”ื "ืœ ืฉืœ ืขืกืงืื•ืช ืืจื•ื›ื•ืช, ื•ื’ื ืžืจื—ื™ื‘ ืืช ืืคืฉืจื•ื™ื•ืช ื ื™ื”ื•ืœ ืžืฆื‘ ื”ืžืขืจื›ืช ืžื”ืฆื“ ืฉืœ ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™: ืคื™ืฆื•ื™ ืœืื—ืจ ืขืกืงื” ืœื ืžื•ืฆืœื—ืช ืขืฉื•ื™ ืฉืœื ืœื”ื—ื–ื™ืจ ืืช ื”ืžืขืจื›ืช ืœืžืฆื‘ื” ื”ืžืงื•ืจื™, ืืœื ืœืกืคืง ื—ืœื•ืคื” ืžืกืœื•ืœ ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื. ื–ื” ื’ื ืžืืคืฉืจ ืœืš ืœื ืœื—ื–ื•ืจ ืขืœ ืฉืœื‘ื™ ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ืฉื”ื•ืฉืœืžื• ื‘ื”ืฆืœื—ื” ื›ืืฉืจ ืืชื” ืžื ืกื” ืœื”ื‘ื™ื ืืช ื”ืชื”ืœื™ืš ืœืกื™ื•ื "ื˜ื•ื‘".

ืžืขื ื™ื™ืŸ ืœืฆื™ื™ืŸ ืฉื‘ืžืขืจื›ื•ืช ืžื•ื ื•ืœื™ื˜ื™ื•ืช, ื“ืคื•ืก ื–ื” ืจืœื•ื•ื ื˜ื™ ื’ื ื›ืฉืžื“ื•ื‘ืจ ื‘ืื™ื ื˜ื’ืจืฆื™ื” ืฉืœ ืชืช-ืžืขืจื›ื•ืช ืžืฉื•ืœื‘ื•ืช ื‘ืื•ืคืŸ ืจื•ืคืฃ ื•ื™ืฉ ื”ืฉืคืขื•ืช ืฉืœื™ืœื™ื•ืช ื”ื ื’ืจืžื•ืช ืžืขืกืงืื•ืช ืืจื•ื›ื•ืช ื•ืžื ืขื™ืœื•ืช ื”ืžืฉืื‘ื™ื ื”ืžืชืื™ืžื•ืช.

ื‘ื”ืชื™ื™ื—ืก ืœืชื”ืœื™ื›ื™ื ื”ืขืกืงื™ื™ื ืฉืœื ื• ื‘ืกื’ื ื•ืŸ BPM, ืžืกืชื‘ืจ ืฉืงืœ ืžืื•ื“ ืœื™ื™ืฉื ืืช ื”ืกืื’ื•ืช: ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืืช ื”ืฉืœื‘ื™ื ื”ื‘ื•ื“ื“ื™ื ืฉืœ ื”ืกืื’ื•ืช ื›ืคืขื™ืœื•ื™ื•ืช ื‘ืชื•ืš ื”ืชื”ืœื™ืš ื”ืขืกืงื™, ื•ื”ืžืฆื‘ ื”ืžืชืžืฉืš ืฉืœ ื”ืชื”ืœื™ืš ื”ืขืกืงื™ ืงื•ื‘ืข ื‘ื™ืŸ ื”ื™ืชืจ. ื“ื‘ืจื™ื ืื—ืจื™ื, ื”ืžืฆื‘ ื”ืคื ื™ืžื™ ืฉืœ ื”ืกืื’ื•ืช. ื›ืœื•ืžืจ, ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืฉื•ื ืžื ื’ื ื•ืŸ ืชื™ืื•ื ื ื•ืกืฃ. ื›ืœ ืžื” ืฉืืชื” ืฆืจื™ืš ื–ื” ืžืชื•ื•ืš ื”ื•ื“ืขื•ืช ืขื ืชืžื™ื›ื” ื‘ืขืจื‘ื•ื™ื•ืช "ืœืคื—ื•ืช ืคืขื ืื—ืช" ื‘ืชื•ืจ ื”ื•ื‘ืœื”.

ืื‘ืœ ืœืคืชืจื•ืŸ ื”ื–ื” ื™ืฉ ื’ื "ืžื—ื™ืจ" ืžืฉืœื•:

  • ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื”ื•ืคืš ืžื•ืจื›ื‘ ื™ื•ืชืจ: ืืชื” ืฆืจื™ืš ืœื—ืฉื‘ ืคื™ืฆื•ื™ื™ื;
  • ื™ื”ื™ื” ืฆื•ืจืš ืœื ื˜ื•ืฉ ืืช ื”ืขืงื‘ื™ื•ืช ื”ืžืœืื”, ืฉื™ื›ื•ืœื” ืœื”ื™ื•ืช ืจื’ื™ืฉื” ื‘ืžื™ื•ื—ื“ ืขื‘ื•ืจ ืžืขืจื›ื•ืช ืžื•ื ื•ืœื™ื˜ื™ื•ืช;
  • ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื”ื•ืคื›ืช ืงืฆืช ื™ื•ืชืจ ืžืกื•ื‘ื›ืช, ื™ืฉ ืฆื•ืจืš ื ื•ืกืฃ ื‘ืžืชื•ื•ืš ื”ื•ื“ืขื•ืช;
  • ื™ื™ื“ืจืฉื• ื›ืœื™ ื ื™ื˜ื•ืจ ื•ื ื™ื”ื•ืœ ื ื•ืกืคื™ื (ืื ื›ื™ ื‘ืื•ืคืŸ ื›ืœืœื™ ื–ื” ืืคื™ืœื• ื˜ื•ื‘: ืื™ื›ื•ืช ืฉื™ืจื•ืช ื”ืžืขืจื›ืช ืชื’ื“ืœ).

ืขื‘ื•ืจ ืžืขืจื›ื•ืช ืžื•ื ื•ืœื™ื˜ื™ื•ืช, ื”ื”ืฆื“ืงื” ืœืฉื™ืžื•ืฉ ื‘"Sags" ืื™ื ื” ื›ื” ื‘ืจื•ืจื”. ืขื‘ื•ืจ ืฉื™ืจื•ืชื™ ืžื™ืงืจื• ื•-SOA ืื—ืจื™ื, ืฉื‘ื”ื, ื›ื›ืœ ื”ื ืจืื”, ื›ื‘ืจ ืงื™ื™ื ืžืชื•ื•ืš, ื•ื”ืขืงื‘ื™ื•ืช ื”ืžืœืื” ื”ื•ืงืจื‘ื” ื‘ืชื—ื™ืœืช ื”ืคืจื•ื™ืงื˜, ื”ื™ืชืจื•ื ื•ืช ืฉืœ ืฉื™ืžื•ืฉ ื‘ื“ืคื•ืก ื–ื” ื™ื›ื•ืœื™ื ืœืขืœื•ืช ืžืฉืžืขื•ืชื™ืช ืขืœ ื”ื—ืกืจื•ื ื•ืช, ื‘ืžื™ื•ื—ื“ ืื ื™ืฉ API ื ื•ื— ื‘- ืจืžืช ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™.

ืื ืงืคืกื•ืœืฆื™ื” ืฉืœ ื”ื™ื’ื™ื•ืŸ ืขืกืงื™ ื‘ืฉื™ืจื•ืชื™ ืžื™ืงืจื•

ื›ืฉื”ืชื—ืœื ื• ืœื”ืชื ืกื•ืช ื‘ืฉื™ืจื•ืชื™ ืžื™ืงืจื•, ืขืœืชื” ืฉืืœื” ืกื‘ื™ืจื”: ื”ื™ื›ืŸ ืœืฉื™ื ืืช ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืฉืœ ื”ื“ื•ืžื™ื™ืŸ ื‘ื™ื—ืก ืœืฉื™ืจื•ืช ื”ืžืกืคืง ื”ืชืžื“ื” ืฉืœ ื ืชื•ื ื™ ื”ื“ื•ืžื™ื™ืŸ?

ื›ืฉืžืกืชื›ืœื™ื ืขืœ ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœ BPMS ืฉื•ื ื™ื, ื–ื” ืขืฉื•ื™ ืœื”ื™ืจืื•ืช ื”ื’ื™ื•ื ื™ ืœื”ืคืจื™ื“ ื‘ื™ืŸ ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืœื”ืชืžื“ื”: ืœื™ืฆื•ืจ ืฉื›ื‘ื” ืฉืœ ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ืขืฆืžืื™ื™ื ืฉืœ ืคืœื˜ืคื•ืจืžื” ื•ืชื—ื•ื ื”ืžื”ื•ื•ื™ื ืืช ื”ืกื‘ื™ื‘ื” ื•ื”ืžื™ื›ืœ ืœื‘ื™ืฆื•ืข ืœื•ื’ื™ืงื” ืขืกืงื™ืช ืฉืœ ื”ืชื—ื•ื, ื•ืœืืจื’ืŸ ืืช ื”ืชืžื“ื” ืฉืœ ื ืชื•ื ื™ ื”ืชื—ื•ื ื›ื™ื—ื™ื“ื” ื ืคืจื“ืช. ืฉื›ื‘ื” ืฉืœ ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ืคืฉื•ื˜ื™ื ื•ืงืœื™ ืžืฉืงืœ. ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ื‘ืžืงืจื” ื–ื” ืžืชื–ืžืจื™ื ืืช ืฉื™ืจื•ืชื™ ืฉื›ื‘ืช ื”ื”ืชืžื“ื”.

ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืกื’ื ื•ืŸ BPM

ืœื’ื™ืฉื” ื”ื–ื• ื™ืฉ ื™ืชืจื•ืŸ ื’ื“ื•ืœ ืžืื•ื“: ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื”ืคืœื˜ืคื•ืจืžื” ื›ื›ืœ ืฉืชืจืฆื”, ื•ืจืง ื”ืฉื›ื‘ื” ื”ืžืงื‘ื™ืœื” ืฉืœ ืฉื™ืจื•ืชื™ ื”ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ืฉืœ ื”ืคืœื˜ืคื•ืจืžื” "ืชืฉืžื™ืŸ" ืžื–ื”. ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืžื›ืœ ืชื—ื•ื ืžืงื‘ืœื™ื ืžื™ื“ ืืช ื”ื”ื–ื“ืžื ื•ืช ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื—ื“ืฉื” ืฉืœ ื”ืคืœื˜ืคื•ืจืžื” ื‘ืจื’ืข ืฉื”ื™ื ืžืชืขื“ื›ื ืช.

ืžื—ืงืจ ืžืคื•ืจื˜ ื™ื•ืชืจ ื’ื™ืœื” ื—ืกืจื•ื ื•ืช ืžืฉืžืขื•ืชื™ื™ื ืฉืœ ื’ื™ืฉื” ื–ื•:

  • ืฉื™ืจื•ืช ืคืœื˜ืคื•ืจืžื” ืฉืžื‘ืฆืข ืืช ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืฉืœ ืชื—ื•ืžื™ื ืจื‘ื™ื ื‘ื‘ืช ืื—ืช ื˜ื•ืžืŸ ื‘ื—ื•ื‘ื• ืกื™ื›ื•ื ื™ื ื’ื“ื•ืœื™ื ื›ื ืงื•ื“ืช ื›ืฉืœ ื™ื—ื™ื“ื”. ืฉื™ื ื•ื™ื™ื ืชื›ื•ืคื™ื ื‘ืœื•ื’ื™ืงื” ื”ืขืกืงื™ืช ืžื’ื‘ื™ืจื™ื ืืช ื”ืกื™ื›ื•ืŸ ืœื‘ืื’ื™ื ืฉื™ื•ื‘ื™ืœื• ืœื›ืฉืœื™ื ื›ืœืœ ืžืขืจื›ืชื™ื™ื;
  • ื‘ืขื™ื•ืช ื‘ื™ืฆื•ืขื™ื: ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืขื•ื‘ื“ ืขื ื”ื ืชื•ื ื™ื ืฉืœื” ื‘ืืžืฆืขื•ืช ืžืžืฉืง ืฆืจ ื•ืื™ื˜ื™:
    • ื”ื ืชื•ื ื™ื ื™ืขื‘ืจื• ืฉื•ื‘ ื•ื™ื•ื–ืจืžื• ื“ืจืš ืžื—ืกื ื™ืช ื”ืจืฉืช;
    • ืฉื™ืจื•ืช ื”ื“ื•ืžื™ื™ืŸ ื™ื—ื–ื™ืจ ืœืจื•ื‘ ื™ื•ืชืจ ื ืชื•ื ื™ื ืžืžื” ืฉื”ืœื•ื’ื™ืงื” ื”ืขืกืงื™ืช ื“ื•ืจืฉืช ืœืขื™ื‘ื•ื“, ืขืงื‘ ื™ื›ื•ืœื•ืช ื‘ืœืชื™ ืžืกืคืงื•ืช ืฉืœ ืคืจืžื˜ืจ ืฉืื™ืœืชื•ืช ื‘ืจืžืช ื”-API ื”ื—ื™ืฆื•ื ื™ ืฉืœ ื”ืฉื™ืจื•ืช;
    • ื›ืžื” ื—ืœืงื™ื ืขืฆืžืื™ื™ื ืฉืœ ื”ื™ื’ื™ื•ืŸ ืขืกืงื™ ื™ื›ื•ืœื™ื ืœื‘ืงืฉ ืฉื•ื‘ ื•ืฉื•ื‘ ืืช ืื•ืชื ื ืชื•ื ื™ื ืœืขื™ื‘ื•ื“ (ืชื•ื›ืœ ืœืžืชืŸ ืืช ื”ื‘ืขื™ื” ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ืฉืขื•ืขื™ืช ื”ืคืขืœื” ืฉืฉื•ืžืจืช ื ืชื•ื ื™ื ื‘ืžื˜ืžื•ืŸ, ืื‘ืœ ื–ื” ืžืกื‘ืš ืขื•ื“ ื™ื•ืชืจ ืืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื•ื™ื•ืฆืจ ื‘ืขื™ื•ืช ืฉืœ ืจืขื ื ื•ืช ื”ื ืชื•ื ื™ื ื•ืื™ ืชื•ืงืฃ ื”ืžื˜ืžื•ืŸ);
  • ื‘ืขื™ื•ืช ืขืกืงื”:
    • ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืขื ืžืฆื‘ ืžืชืžืฉืš ื”ืžืื•ื—ืกืŸ ืขืœ ื™ื“ื™ ืฉื™ืจื•ืช ื”ืคืœื˜ืคื•ืจืžื” ืื™ื ื ืขื•ืœื™ื ื‘ืงื ื” ืื—ื“ ืขื ื ืชื•ื ื™ ื”ืชื—ื•ื, ื•ืื™ืŸ ื“ืจื›ื™ื ืงืœื•ืช ืœืคืชื•ืจ ื‘ืขื™ื” ื–ื•;
    • ื”ืขื‘ืจืช ื ืขื™ืœืช ื ืชื•ื ื™ ื”ื“ื•ืžื™ื™ืŸ ืืœ ืžื—ื•ืฅ ืœืขืกืงื”: ืื ื”ืœื•ื’ื™ืงื” ื”ืขืกืงื™ืช ืฉืœ ื”ื“ื•ืžื™ื™ืŸ ืฆืจื™ื›ื” ืœื‘ืฆืข ืฉื™ื ื•ื™ื™ื, ืœืื—ืจ ื‘ื“ื™ืงื” ืจืืฉื•ื ื” ืฉืœ ื ื›ื•ื ื•ืช ื”ื ืชื•ื ื™ื ื‘ืคื•ืขืœ, ื™ืฉ ืฆื•ืจืš ืœืฉืœื•ืœ ืืคืฉืจื•ืช ืฉืœ ืฉื™ื ื•ื™ ืชื—ืจื•ืชื™ ื‘ื ืชื•ื ื™ื ื”ืžืขื•ื‘ื“ื™ื. ื—ืกื™ืžื” ื—ื™ืฆื•ื ื™ืช ืฉืœ ื ืชื•ื ื™ื ื™ื›ื•ืœื” ืœืกื™ื™ืข ื‘ืคืชืจื•ืŸ ื”ื‘ืขื™ื”, ืืš ืคืชืจื•ืŸ ื›ื–ื” ื˜ื•ืžืŸ ื‘ื—ื•ื‘ื• ืกื™ื›ื•ื ื™ื ื ื•ืกืคื™ื ื•ืžืคื—ื™ืช ืืช ื”ืืžื™ื ื•ืช ื”ื›ื•ืœืœืช ืฉืœ ื”ืžืขืจื›ืช;
  • ืกื™ื‘ื•ื›ื™ื ื ื•ืกืคื™ื ื‘ืขืช ืขื“ื›ื•ืŸ: ื‘ืžืงืจื™ื ืžืกื•ื™ืžื™ื, ืขืœื™ืš ืœืขื“ื›ืŸ ืืช ืฉื™ืจื•ืช ื”ื”ืชืžื“ื” ื•ื”ืœื•ื’ื™ืงื” ื”ืขืกืงื™ืช ื‘ืื•ืคืŸ ืกื™ื ื›ืจื•ื ื™ ืื• ื‘ืจืฆืฃ ืงืคื“ื ื™.

ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ, ื ืืœืฆืชื™ ืœื—ื–ื•ืจ ืœื™ืกื•ื“ื•ืช: ืœื›ืœื•ืœ ืืช ื ืชื•ื ื™ ื”ื“ื•ืžื™ื™ืŸ ื•ื”ืœื•ื’ื™ืงื” ื”ืขืกืงื™ืช ืฉืœ ื”ื“ื•ืžื™ื™ืŸ ืœืžื™ืงืจื•-ืฉื™ืจื•ืช ืื—ื“. ื’ื™ืฉื” ื–ื• ืžืคืฉื˜ืช ืืช ืชืคื™ืกืช ื”ืžื™ืงืจื•-ืฉื™ืจื•ืช ื›ืžืจื›ื™ื‘ ืื™ื ื˜ื’ืจืœื™ ื‘ืžืขืจื›ืช ื•ืื™ื ื” ืžื•ืœื™ื“ื” ืืช ื”ื‘ืขื™ื•ืช ื”ื "ืœ. ื–ื” ื’ื ืœื ื‘ื—ื™ื ื:

  • ืกื˜ื ื“ืจื˜ื™ื–ืฆื™ื” ืฉืœ API ื ื“ืจืฉืช ืœืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ (ื‘ืคืจื˜, ื›ื“ื™ ืœืกืคืง ืคืขื™ืœื•ื™ื•ืช ืžืฉืชืžืฉ ื›ื—ืœืง ืžืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื) ื•ืฉื™ืจื•ืชื™ ืคืœื˜ืคื•ืจืžืช API; ืชืฉื•ืžืช ืœื‘ ืงืคื“ื ื™ืช ื™ื•ืชืจ ืœืฉื™ื ื•ื™ื™ API, ื ื“ืจืฉืช ืชืื™ืžื•ืช ืงื“ื™ืžื” ื•ืื—ื•ืจื”;
  • ื ื“ืจืฉ ืœื”ื•ืกื™ืฃ ืกืคืจื™ื•ืช ืจื™ืฆื” ื ื•ืกืคื•ืช ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืืช ืชืคืงื•ื“ ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื›ื—ืœืง ืžื›ืœ ืฉื™ืจื•ืช ืžื™ืงืจื• ื›ื–ื”, ื•ื”ื“ื‘ืจ ืžื•ื‘ื™ืœ ืœื“ืจื™ืฉื•ืช ื—ื“ืฉื•ืช ืœืกืคืจื™ื•ืช ื›ืืœื”: ืงืœื•ืช ื•ืžื™ื ื™ืžื•ื ืชืœื•ืช ื˜ืจื ื–ื™ื˜ื™ื‘ื™ืช;
  • ืžืคืชื—ื™ ืœื•ื’ื™ืงื” ืขืกืงื™ืช ืฆืจื™ื›ื™ื ืœืขืงื•ื‘ ืื—ืจ ื’ืจืกืื•ืช ื”ืกืคืจื™ื™ื”: ืื ืฉื™ืจื•ืช ืžื™ืงืจื• ืœื ื”ื•ืฉืœื ื‘ืžืฉืš ื–ืžืŸ ืจื‘, ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉื”ื•ื ื™ื›ื™ืœ ื’ืจืกื” ืžื™ื•ืฉื ืช ืฉืœ ื”ืกืคืจื™ื•ืช. ื–ื” ื™ื›ื•ืœ ืœื”ื•ื•ืช ืžื›ืฉื•ืœ ื‘ืœืชื™ ืฆืคื•ื™ ืœื”ื•ืกืคืช ืชื›ื•ื ื” ื—ื“ืฉื” ื•ืขืœื•ืœ ืœื“ืจื•ืฉ ืืช ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื”ื™ืฉืŸ ืฉืœ ืฉื™ืจื•ืช ื›ื–ื” ืœืขื‘ื•ืจ ืœื’ืจืกืื•ืช ื—ื“ืฉื•ืช ืฉืœ ื”ืกืคืจื™ื•ืช ืื ื”ื™ื• ืฉื™ื ื•ื™ื™ื ืœื ืชื•ืืžื™ื ื‘ื™ืŸ ื’ืจืกืื•ืช.

ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืกื’ื ื•ืŸ BPM

ืฉื›ื‘ื” ืฉืœ ืฉื™ืจื•ืชื™ ืคืœื˜ืคื•ืจืžื” ืงื™ื™ืžืช ื’ื ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื” ื›ื–ื•, ืืš ืฉื›ื‘ื” ื–ื• ืื™ื ื” ืžื”ื•ื•ื” ืขื•ื“ ืžื™ื›ืœ ืœื‘ื™ืฆื•ืข ืœื•ื’ื™ืงื” ืขืกืงื™ืช ืฉืœ ืชื—ื•ื, ืืœื ืจืง ืืช ื”ืกื‘ื™ื‘ื” ืฉืœื”, ื”ืžืกืคืงืช ืคื•ื ืงืฆื™ื•ืช "ืคืœื˜ืคื•ืจืžื”" ืขื–ืจ. ืฉื›ื‘ื” ื›ื–ื• ื ื“ืจืฉืช ืœื ืจืง ื›ื“ื™ ืœืฉืžื•ืจ ืขืœ ืงืœื™ืœื•ืชื ืฉืœ ืฉื™ืจื•ืชื™ ืžื™ืงืจื•-ื“ื•ืžื™ื™ืŸ, ืืœื ื’ื ื›ื“ื™ ืœืจื›ื– ืืช ื”ื ื™ื”ื•ืœ.

ืœื“ื•ื’ืžื”, ืคืขื™ืœื•ื™ื•ืช ืžืฉืชืžืฉื™ื ื‘ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืžื™ื™ืฆืจื•ืช ืžืฉื™ืžื•ืช. ืขื ื–ืืช, ื›ืืฉืจ ืขื•ื‘ื“ื™ื ืขื ืžืฉื™ืžื•ืช, ื”ืžืฉืชืžืฉ ื—ื™ื™ื‘ ืœืจืื•ืช ืžืฉื™ืžื•ืช ืžื›ืœ ื”ื“ื•ืžื™ื™ื ื™ื ื‘ืจืฉื™ืžื” ื”ื›ืœืœื™ืช, ืžื” ืฉืื•ืžืจ ืฉื—ื™ื™ื‘ ืœื”ื™ื•ืช ืฉื™ืจื•ืช ืคืœื˜ืคื•ืจืžืช ืจื™ืฉื•ื ืžืฉื™ืžื•ืช ืžืชืื™ื, ื ืงื™ ืžื”ื™ื’ื™ื•ืŸ ืขืกืงื™ ืฉืœ ื”ื“ื•ืžื™ื™ืŸ. ืฉืžื™ืจื” ืขืœ ื”ืื ืงืคืกื•ืœืฆื™ื” ืฉืœ ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื‘ื”ืงืฉืจ ื–ื” ื”ื™ื ื“ื™ ื‘ืขื™ื™ืชื™ืช, ื•ื–ื• ืขื•ื“ ืคืฉืจื” ืฉืœ ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื”ื–ื•.

ืฉื™ืœื•ื‘ ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ื“ืจืš ืขื™ื ื™ื• ืฉืœ ืžืคืชื— ืืคืœื™ืงืฆื™ื•ืช

ื›ืคื™ ืฉื›ื‘ืจ ืฆื•ื™ืŸ ืœืขื™ืœ, ืžืคืชื— ื”ืืคืœื™ืงืฆื™ื•ืช ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžื•ืคืฉื˜ ืžื”ืชื›ื•ื ื•ืช ื”ื˜ื›ื ื™ื•ืช ื•ื”ื”ื ื“ืกื™ื•ืช ืฉืœ ื™ื™ืฉื•ื ื”ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ ืžืกืคืจ ื™ื™ืฉื•ืžื™ื ืขืœ ืžื ืช ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืกืžื•ืš ืขืœ ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช ืคื™ืชื•ื— ื˜ื•ื‘ื”.

ื‘ื•ืื• ื ื ืกื” ืœืคืชื•ืจ ื‘ืขื™ื™ืช ืื™ื ื˜ื’ืจืฆื™ื” ืงืฉื” ืœืžื“ื™, ืฉื”ื•ืžืฆืื” ื‘ืžื™ื•ื—ื“ ืขื‘ื•ืจ ื”ืžืืžืจ. ื–ื• ืชื”ื™ื” ืžืฉื™ืžืช "ืžืฉื—ืง" ื”ื›ื•ืœืœืช ืฉืœื•ืฉ ืืคืœื™ืงืฆื™ื•ืช, ื›ืืฉืจ ื›ืœ ืื—ืช ืžื”ืŸ ืžื’ื“ื™ืจื” ืฉื ื“ื•ืžื™ื™ืŸ ื›ืœืฉื”ื•: "app1", "app2", "app3".

ื‘ืชื•ืš ื›ืœ ืืคืœื™ืงืฆื™ื” ืžื•ืคืขืœื™ื ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืฉืžืชื—ื™ืœื™ื "ืœืฉื—ืง ื‘ื›ื“ื•ืจ" ื“ืจืš ืืคื™ืง ื”ืื™ื ื˜ื’ืจืฆื™ื”. ื”ื•ื“ืขื•ืช ื‘ืฉื "ื›ื“ื•ืจ" ื™ืฉืžืฉื• ื›ื›ื“ื•ืจ.

ื›ืœืœื™ ื”ืžืฉื—ืง:

  • ื”ืฉื—ืงืŸ ื”ืจืืฉื•ืŸ ื”ื•ื ื”ื™ื•ื–ื. ื”ื•ื ืžื–ืžื™ืŸ ืฉื—ืงื ื™ื ืื—ืจื™ื ืœืžืฉื—ืง, ืžืชื—ื™ืœ ืืช ื”ืžืฉื—ืง ื•ื™ื›ื•ืœ ืœืกื™ื™ื ืื•ืชื• ื‘ื›ืœ ืขืช;
  • ืฉื—ืงื ื™ื ืื—ืจื™ื ืžืฆื”ื™ืจื™ื ืขืœ ื”ืฉืชืชืคื•ืชื ื‘ืžืฉื—ืง, "ื”ื›ื™ืจื•" ื–ื” ืืช ื–ื” ื•ืืช ื”ืฉื—ืงืŸ ื”ืจืืฉื•ืŸ;
  • ืœืื—ืจ ืงื‘ืœืช ื”ื›ื“ื•ืจ, ื”ืฉื—ืงืŸ ื‘ื•ื—ืจ ืฉื—ืงืŸ ืžืฉืชืชืฃ ืื—ืจ ื•ืžืขื‘ื™ืจ ืœื• ืืช ื”ื›ื“ื•ืจ. ื”ืžืกืคืจ ื”ื›ื•ืœืœ ืฉืœ ืžืขื‘ืจื™ื ื ืกืคืจ;
  • ืœื›ืœ ืฉื—ืงืŸ ื™ืฉ "ืื ืจื’ื™ื”", ืืฉืจ ืคื•ื—ืชืช ืขื ื›ืœ ืžืกื™ืจื” ืฉืœ ื”ื›ื“ื•ืจ ืฉืœ ืื•ืชื• ืฉื—ืงืŸ. ื›ืืฉืจ ื”ืื ืจื’ื™ื” ื ื’ืžืจืช, ื”ืฉื—ืงืŸ ืžืกื•ืœืง ืžื”ืžืฉื—ืง, ื•ืžื•ื“ื™ืข ืขืœ ืคืจื™ืฉื”;
  • ืื ื”ืฉื—ืงืŸ ื ืฉืืจ ืœื‘ื“, ื”ื•ื ืžื›ืจื™ื– ืžื™ื“ ืขืœ ืขื–ื™ื‘ืชื•;
  • ื›ืืฉืจ ื›ืœ ื”ืฉื—ืงื ื™ื ืžื•ื“ื—ื™ื, ื”ืฉื—ืงืŸ ื”ืจืืฉื•ืŸ ืžื›ืจื™ื– ืขืœ ืกื™ื•ื ื”ืžืฉื—ืง. ืื ื”ื•ื ืขื–ื‘ ืืช ื”ืžืฉื—ืง ืžื•ืงื“ื ื™ื•ืชืจ, ืื– ื ืฉืืจ ืœืขืงื•ื‘ ืื—ืจื™ ื”ืžืฉื—ืง ื›ื“ื™ ืœื”ืฉืœื™ื ืื•ืชื•.

ื›ื“ื™ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื”ื–ื•, ืืฉืชืžืฉ ื‘-DSL ืฉืœื ื• ืœืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื, ืžื” ืฉืžืืคืฉืจ ืœืชืืจ ืืช ื”ื”ื™ื’ื™ื•ืŸ ื‘ืงื•ื˜ืœื™ืŸ ื‘ืฆื•ืจื” ืงื•ืžืคืงื˜ื™ืช, ืขื ืžื™ื ื™ืžื•ื ืœื•ื—.

ื‘ืืคืœื™ืงืฆื™ื” app1, ื”ืชื”ืœื™ืš ื”ืขืกืงื™ ืฉืœ ื”ืฉื—ืงืŸ ื”ืจืืฉื•ืŸ (ื”ื•ื ื’ื ื”ื™ื•ื–ื ืฉืœ ื”ืžืฉื—ืง) ื™ืขื‘ื•ื“:

class InitialPlayer

import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.constraint.UniqueConstraints
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.dsl.taskOperation
import ru.krista.bpm.runtime.instance.MessageSendInstance

data class PlayerInfo(val name: String, val domain: String, val id: String)

class PlayersList : ArrayList<PlayerInfo>()

// ะญั‚ะพ ะบะปะฐัั ัะบะทะตะผะฟะปัั€ะฐ ะฟั€ะพั†ะตััะฐ: ะธะฝะบะฐะฟััƒะปะธั€ัƒะตั‚ ะตะณะพ ะฒะฝัƒั‚ั€ะตะฝะฝะตะต ัะพัั‚ะพัะฝะธะต
class InitialPlayer : ProcessImpl<InitialPlayer>(initialPlayerModel) {
    var playerName: String by persistent("Player1")
    var energy: Int by persistent(30)
    var players: PlayersList by persistent(PlayersList())
    var shotCounter: Int = 0
}

// ะญั‚ะพ ะดะตะบะปะฐั€ะฐั†ะธั ะผะพะดะตะปะธ ะฟั€ะพั†ะตััะฐ: ัะพะทะดะฐะตั‚ัั ะพะดะธะฝ ั€ะฐะท, ะธัะฟะพะปัŒะทัƒะตั‚ัั ะฒัะตะผะธ
// ัะบะทะตะผะฟะปัั€ะฐะผะธ ะฟั€ะพั†ะตััะฐ ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‰ะตะณะพ ะบะปะฐััะฐ
val initialPlayerModel = processModel<InitialPlayer>(name = "InitialPlayer",
                                                     version = 1) {

    // ะŸะพ ะฟั€ะฐะฒะธะปะฐะผ, ะฟะตั€ะฒั‹ะน ะธะณั€ะพะบ ัะฒะปัะตั‚ัั ะธะฝะธั†ะธะฐั‚ะพั€ะพะผ ะธะณั€ั‹ ะธ ะดะพะปะถะตะฝ ะฑั‹ั‚ัŒ ะตะดะธะฝัั‚ะฒะตะฝะฝั‹ะผ
    uniqueConstraint = UniqueConstraints.singleton

    // ะžะฑัŠัะฒะปัะตะผ ะฐะบั‚ะธะฒะฝะพัั‚ะธ, ะธะท ะบะพั‚ะพั€ั‹ั… ัะพัั‚ะพะธั‚ ะฑะธะทะฝะตั-ะฟั€ะพั†ะตัั
    val sendNewGameSignal = signal<String>("NewGame")
    val sendStopGameSignal = signal<String>("StopGame")
    val startTask = humanTask("Start") {
        taskOperation {
            processCondition { players.size > 0 }
            confirmation { "ะŸะพะดะบะปัŽั‡ะธะปะพััŒ ${players.size} ะธะณั€ะพะบะพะฒ. ะะฐั‡ะธะฝะฐะตะผ?" }
        }
    }
    val stopTask = humanTask("Stop") {
        taskOperation {}
    }
    val waitPlayerJoin = signalWait<String>("PlayerJoin") { signal ->
        players.add(PlayerInfo(
                signal.data!!,
                signal.sender.domain,
                signal.sender.processInstanceId))
        println("... join player ${signal.data} ...")
    }
    val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
        players.remove(PlayerInfo(
                signal.data!!,
                signal.sender.domain,
                signal.sender.processInstanceId))
        println("... player ${signal.data} is out ...")
    }
    val sendPlayerOut = signal<String>("PlayerOut") {
        signalData = { playerName }
    }
    val sendHandshake = messageSend<String>("Handshake") {
        messageData = { playerName }
        activation = {
            receiverDomain = process.players.last().domain
            receiverProcessInstanceId = process.players.last().id
        }
    }
    val throwStartBall = messageSend<Int>("Ball") {
        messageData = { 1 }
        activation = { selectNextPlayer() }
    }
    val throwBall = messageSend<Int>("Ball") {
        messageData = { shotCounter + 1 }
        activation = { selectNextPlayer() }
        onEntry { energy -= 1 }
    }
    val waitBall = messageWaitData<Int>("Ball") {
        shotCounter = it
    }

    // ะขะตะฟะตั€ัŒ ะบะพะฝัั‚ั€ัƒะธั€ัƒะตะผ ะณั€ะฐั„ ะฟั€ะพั†ะตััะฐ ะธะท ะพะฑัŠัะฒะปะตะฝะฝั‹ั… ะฐะบั‚ะธะฒะฝะพัั‚ะตะน
    startFrom(sendNewGameSignal)
            .fork("mainFork") {
                next(startTask)
                next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
                next(waitPlayerOut)
                        .branch("checkPlayers") {
                            ifTrue { players.isEmpty() }
                                    .next(sendStopGameSignal)
                                    .terminate()
                            ifElse().next(waitPlayerOut)
                        }
            }
    startTask.fork("afterStart") {
        next(throwStartBall)
                .branch("mainLoop") {
                    ifTrue { energy < 5 }.next(sendPlayerOut).next(waitBall)
                    ifElse().next(waitBall).next(throwBall).loop()
                }
        next(stopTask).next(sendStopGameSignal)
    }

    // ะะฐะฒะตัˆะฐะตะผ ะฝะฐ ะฐะบั‚ะธะฒะฝะพัั‚ะธ ะดะพะฟะพะปะฝะธั‚ะตะปัŒะฝั‹ะต ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ ะดะปั ะปะพะณะธั€ะพะฒะฐะฝะธั
    sendNewGameSignal.onExit { println("Let's play!") }
    sendStopGameSignal.onExit { println("Stop!") }
    sendPlayerOut.onExit { println("$playerName: I'm out!") }
}

private fun MessageSendInstance<InitialPlayer, Int>.selectNextPlayer() {
    val player = process.players.random()
    receiverDomain = player.domain
    receiverProcessInstanceId = player.id
    println("Step ${process.shotCounter + 1}: " +
            "${process.playerName} >>> ${player.name}")
}

ื‘ื ื•ืกืฃ ืœื‘ื™ืฆื•ืข ืœื•ื’ื™ืงื” ืขืกืงื™ืช, ื”ืงื•ื“ ืœืขื™ืœ ื™ื›ื•ืœ ืœื™ื™ืฆืจ ืžื•ื“ืœ ืื•ื‘ื™ื™ืงื˜ ืฉืœ ืชื”ืœื™ืš ืขืกืงื™ ืฉื ื™ืชืŸ ืœื”ืžื—ื™ืฉ ืื•ืชื• ื›ืชืจืฉื™ื. ืขื“ื™ื™ืŸ ืœื ื™ื™ืฉืžื ื• ืืช ื”ื•ื•ื™ื–ื•ืืœื™ื–ืจ, ืื– ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœื”ืงื“ื™ืฉ ื–ืžืŸ ืœืฆื™ื•ืจ (ื›ืืŸ ืคื™ืฉื˜ืชื™ ืžืขื˜ ืืช ืกื™ืžื•ืŸ ื”-BPMN ืœื’ื‘ื™ ื”ืฉื™ืžื•ืฉ ื‘ืฉืขืจื™ื ื›ื“ื™ ืœืฉืคืจ ืืช ื”ืขืงื‘ื™ื•ืช ืฉืœ ื”ื“ื™ืื’ืจืžื” ืขื ื”ืงื•ื“ ืฉืœืžืขืœื”):

ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืกื’ื ื•ืŸ BPM

app2 ื™ื›ืœื•ืœ ืชื”ืœื™ืš ืขืกืงื™ ืฉืœ ืฉื—ืงืŸ ืื—ืจ:

ืžื—ืœืงื” RandomPlayer

import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.instance.MessageSendInstance

data class PlayerInfo(val name: String, val domain: String, val id: String)

class PlayersList: ArrayList<PlayerInfo>()

class RandomPlayer : ProcessImpl<RandomPlayer>(randomPlayerModel) {

    var playerName: String by input(persistent = true, 
                                    defaultValue = "RandomPlayer")
    var energy: Int by input(persistent = true, defaultValue = 30)
    var players: PlayersList by persistent(PlayersList())
    var allPlayersOut: Boolean by persistent(false)
    var shotCounter: Int = 0

    val selfPlayer: PlayerInfo
        get() = PlayerInfo(playerName, env.eventDispatcher.domainName, id)
}

val randomPlayerModel = processModel<RandomPlayer>(name = "RandomPlayer", 
                                                   version = 1) {

    val waitNewGameSignal = signalWait<String>("NewGame")
    val waitStopGameSignal = signalWait<String>("StopGame")
    val sendPlayerJoin = signal<String>("PlayerJoin") {
        signalData = { playerName }
    }
    val sendPlayerOut = signal<String>("PlayerOut") {
        signalData = { playerName }
    }
    val waitPlayerJoin = signalWaitCustom<String>("PlayerJoin") {
        eventCondition = { signal ->
            signal.sender.processInstanceId != process.id 
                && !process.players.any { signal.sender.processInstanceId == it.id}
        }
        handler = { signal ->
            players.add(PlayerInfo(
                    signal.data!!,
                    signal.sender.domain,
                    signal.sender.processInstanceId))
        }
    }
    val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
        players.remove(PlayerInfo(
                signal.data!!,
                signal.sender.domain,
                signal.sender.processInstanceId))
        allPlayersOut = players.isEmpty()
    }
    val sendHandshake = messageSend<String>("Handshake") {
        messageData = { playerName }
        activation = {
            receiverDomain = process.players.last().domain
            receiverProcessInstanceId = process.players.last().id
        }
    }
    val receiveHandshake = messageWait<String>("Handshake") { message ->
        if (!players.any { message.sender.processInstanceId == it.id}) {
            players.add(PlayerInfo(
                    message.data!!, 
                    message.sender.domain, 
                    message.sender.processInstanceId))
        }
    }
    val throwBall = messageSend<Int>("Ball") {
        messageData = { shotCounter + 1 }
        activation = { selectNextPlayer() }
        onEntry { energy -= 1 }
    }
    val waitBall = messageWaitData<Int>("Ball") {
        shotCounter = it
    }

    startFrom(waitNewGameSignal)
            .fork("mainFork") {
                next(sendPlayerJoin)
                        .branch("mainLoop") {
                            ifTrue { energy < 5 || allPlayersOut }
                                    .next(sendPlayerOut)
                                    .next(waitBall)
                            ifElse()
                                    .next(waitBall)
                                    .next(throwBall)
                                    .loop()
                        }
                next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
                next(waitPlayerOut).next(waitPlayerOut)
                next(receiveHandshake).next(receiveHandshake)
                next(waitStopGameSignal).terminate()
            }

    sendPlayerJoin.onExit { println("$playerName: I'm here!") }
    sendPlayerOut.onExit { println("$playerName: I'm out!") }
}

private fun MessageSendInstance<RandomPlayer, Int>.selectNextPlayer() {
    val player = if (process.players.isNotEmpty()) 
        process.players.random() 
    else 
        process.selfPlayer
    receiverDomain = player.domain
    receiverProcessInstanceId = player.id
    println("Step ${process.shotCounter + 1}: " +
            "${process.playerName} >>> ${player.name}")
}

ืชืจืฉื™ื:

ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืกื’ื ื•ืŸ BPM

ื‘ืืคืœื™ืงืฆื™ื™ืช app3 ื ื”ืคื•ืš ืืช ื”ืฉื—ืงืŸ ืœื”ืชื ื”ื’ื•ืช ืงืฆืช ืฉื•ื ื”: ื‘ืžืงื•ื ืœื‘ื—ื•ืจ ืืงืจืื™ืช ืืช ื”ืฉื—ืงืŸ ื”ื‘ื, ื”ื•ื ื™ืคืขืœ ืœืคื™ ื”ืืœื’ื•ืจื™ืชื round robin:

class RoundRobinPlayer

import ru.krista.bpm.ProcessInstance
import ru.krista.bpm.runtime.ProcessImpl
import ru.krista.bpm.runtime.dsl.processModel
import ru.krista.bpm.runtime.instance.MessageSendInstance

data class PlayerInfo(val name: String, val domain: String, val id: String)

class PlayersList: ArrayList<PlayerInfo>()

class RoundRobinPlayer : ProcessImpl<RoundRobinPlayer>(roundRobinPlayerModel) {

    var playerName: String by input(persistent = true, 
                                    defaultValue = "RoundRobinPlayer")
    var energy: Int by input(persistent = true, defaultValue = 30)
    var players: PlayersList by persistent(PlayersList())
    var nextPlayerIndex: Int by persistent(-1)
    var allPlayersOut: Boolean by persistent(false)
    var shotCounter: Int = 0

    val selfPlayer: PlayerInfo
        get() = PlayerInfo(playerName, env.eventDispatcher.domainName, id)
}

val roundRobinPlayerModel = processModel<RoundRobinPlayer>(
        name = "RoundRobinPlayer", 
        version = 1) {

    val waitNewGameSignal = signalWait<String>("NewGame")
    val waitStopGameSignal = signalWait<String>("StopGame")
    val sendPlayerJoin = signal<String>("PlayerJoin") {
        signalData = { playerName }
    }
    val sendPlayerOut = signal<String>("PlayerOut") {
        signalData = { playerName }
    }
    val waitPlayerJoin = signalWaitCustom<String>("PlayerJoin") {
        eventCondition = { signal ->
            signal.sender.processInstanceId != process.id 
                && !process.players.any { signal.sender.processInstanceId == it.id}
        }
        handler = { signal ->
            players.add(PlayerInfo(
                    signal.data!!, 
                    signal.sender.domain, 
                    signal.sender.processInstanceId))
        }
    }
    val waitPlayerOut = signalWait<String>("PlayerOut") { signal ->
        players.remove(PlayerInfo(
                signal.data!!, 
                signal.sender.domain, 
                signal.sender.processInstanceId))
        allPlayersOut = players.isEmpty()
    }
    val sendHandshake = messageSend<String>("Handshake") {
        messageData = { playerName }
        activation = {
            receiverDomain = process.players.last().domain
            receiverProcessInstanceId = process.players.last().id
        }
    }
    val receiveHandshake = messageWait<String>("Handshake") { message ->
        if (!players.any { message.sender.processInstanceId == it.id}) {
            players.add(PlayerInfo(
                    message.data!!, 
                    message.sender.domain, 
                    message.sender.processInstanceId))
        }
    }
    val throwBall = messageSend<Int>("Ball") {
        messageData = { shotCounter + 1 }
        activation = { selectNextPlayer() }
        onEntry { energy -= 1 }
    }
    val waitBall = messageWaitData<Int>("Ball") {
        shotCounter = it
    }

    startFrom(waitNewGameSignal)
            .fork("mainFork") {
                next(sendPlayerJoin)
                        .branch("mainLoop") {
                            ifTrue { energy < 5 || allPlayersOut }
                                    .next(sendPlayerOut)
                                    .next(waitBall)
                            ifElse()
                                    .next(waitBall)
                                    .next(throwBall)
                                    .loop()
                        }
                next(waitPlayerJoin).next(sendHandshake).next(waitPlayerJoin)
                next(waitPlayerOut).next(waitPlayerOut)
                next(receiveHandshake).next(receiveHandshake)
                next(waitStopGameSignal).terminate()
            }

    sendPlayerJoin.onExit { println("$playerName: I'm here!") }
    sendPlayerOut.onExit { println("$playerName: I'm out!") }
}

private fun MessageSendInstance<RoundRobinPlayer, Int>.selectNextPlayer() {
    var idx = process.nextPlayerIndex + 1
    if (idx >= process.players.size) {
        idx = 0
    }
    process.nextPlayerIndex = idx
    val player = if (process.players.isNotEmpty()) 
        process.players[idx] 
    else 
        process.selfPlayer
    receiverDomain = player.domain
    receiverProcessInstanceId = player.id
    println("Step ${process.shotCounter + 1}: " +
            "${process.playerName} >>> ${player.name}")
}

ืื—ืจืช, ื”ืชื ื”ื’ื•ืช ื”ืฉื—ืงืŸ ืื™ื ื” ืฉื•ื ื” ืžื”ืงื•ื“ืžืช, ื›ืš ืฉื”ืชืจืฉื™ื ืื™ื ื• ืžืฉืชื ื”.

ืขื›ืฉื™ื• ืื ื—ื ื• ืฆืจื™ื›ื™ื ื‘ื“ื™ืงื” ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ื›ืœ. ืื ื™ ืืชืŸ ืจืง ืืช ื”ืงื•ื“ ืฉืœ ื”ื‘ื“ื™ืงื” ืขืฆืžื”, ื›ื“ื™ ืœื ืœื‘ืœื‘ืœ ืืช ื”ืžืืžืจ ื‘ืœื•ื— (ืœืžืขืฉื”, ื”ืฉืชืžืฉืชื™ ื‘ืกื‘ื™ื‘ืช ื”ื‘ื“ื™ืงื” ืฉื ื•ืฆืจื” ืงื•ื“ื ืœื›ืŸ ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื”ืื™ื ื˜ื’ืจืฆื™ื” ืฉืœ ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืื—ืจื™ื):

testGame()

@Test
public void testGame() throws InterruptedException {
    String pl2 = startProcess(app2, "RandomPlayer", playerParams("Player2", 20));
    String pl3 = startProcess(app2, "RandomPlayer", playerParams("Player3", 40));
    String pl4 = startProcess(app3, "RoundRobinPlayer", playerParams("Player4", 25));
    String pl5 = startProcess(app3, "RoundRobinPlayer", playerParams("Player5", 35));
    String pl1 = startProcess(app1, "InitialPlayer");
    // ะขะตะฟะตั€ัŒ ะฝัƒะถะฝะพ ะฝะตะผะฝะพะณะพ ะฟะพะดะพะถะดะฐั‚ัŒ, ะฟะพะบะฐ ะธะณั€ะพะบะธ "ะฟะพะทะฝะฐะบะพะผัั‚ัั" ะดั€ัƒะณ ั ะดั€ัƒะณะพะผ.
    // ะ–ะดะฐั‚ัŒ ั‡ะตั€ะตะท sleep - ะฟะปะพั…ะพะต ั€ะตัˆะตะฝะธะต, ะทะฐั‚ะพ ัะฐะผะพะต ะฟั€ะพัั‚ะพะต. 
    // ะะต ะดะตะปะฐะนั‚ะต ั‚ะฐะบ ะฒ ัะตั€ัŒะตะทะฝั‹ั… ั‚ะตัั‚ะฐั…!
    Thread.sleep(1000);
    // ะ—ะฐะฟัƒัะบะฐะตะผ ะธะณั€ัƒ, ะทะฐะบั€ั‹ะฒะฐั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŒัะบัƒัŽ ะฐะบั‚ะธะฒะฝะพัั‚ัŒ
    assertTrue(closeTask(app1, pl1, "Start"));
    app1.getWaiting().waitProcessFinished(pl1);
    app2.getWaiting().waitProcessFinished(pl2);
    app2.getWaiting().waitProcessFinished(pl3);
    app3.getWaiting().waitProcessFinished(pl4);
    app3.getWaiting().waitProcessFinished(pl5);
}

private Map<String, Object> playerParams(String name, int energy) {
    Map<String, Object> params = new HashMap<>();
    params.put("playerName", name);
    params.put("energy", energy);
    return params;
}

ื”ืจืฅ ืืช ื”ื‘ื“ื™ืงื”, ื”ืกืชื›ืœ ื‘ื™ื•ืžืŸ:

ืคืœื˜ ืงื•ื ืกื•ืœื”

ะ’ะทัั‚ะฐ ะฑะปะพะบะธั€ะพะฒะบะฐ ะบะปัŽั‡ะฐ lock://app1/process/InitialPlayer
Let's play!
ะกะฝัั‚ะฐ ะฑะปะพะบะธั€ะพะฒะบะฐ ะบะปัŽั‡ะฐ lock://app1/process/InitialPlayer
Player2: I'm here!
Player3: I'm here!
Player4: I'm here!
Player5: I'm here!
... join player Player2 ...
... join player Player4 ...
... join player Player3 ...
... join player Player5 ...
Step 1: Player1 >>> Player3
Step 2: Player3 >>> Player5
Step 3: Player5 >>> Player3
Step 4: Player3 >>> Player4
Step 5: Player4 >>> Player3
Step 6: Player3 >>> Player4
Step 7: Player4 >>> Player5
Step 8: Player5 >>> Player2
Step 9: Player2 >>> Player5
Step 10: Player5 >>> Player4
Step 11: Player4 >>> Player2
Step 12: Player2 >>> Player4
Step 13: Player4 >>> Player1
Step 14: Player1 >>> Player4
Step 15: Player4 >>> Player3
Step 16: Player3 >>> Player1
Step 17: Player1 >>> Player2
Step 18: Player2 >>> Player3
Step 19: Player3 >>> Player1
Step 20: Player1 >>> Player5
Step 21: Player5 >>> Player1
Step 22: Player1 >>> Player2
Step 23: Player2 >>> Player4
Step 24: Player4 >>> Player5
Step 25: Player5 >>> Player3
Step 26: Player3 >>> Player4
Step 27: Player4 >>> Player2
Step 28: Player2 >>> Player5
Step 29: Player5 >>> Player2
Step 30: Player2 >>> Player1
Step 31: Player1 >>> Player3
Step 32: Player3 >>> Player4
Step 33: Player4 >>> Player1
Step 34: Player1 >>> Player3
Step 35: Player3 >>> Player4
Step 36: Player4 >>> Player3
Step 37: Player3 >>> Player2
Step 38: Player2 >>> Player5
Step 39: Player5 >>> Player4
Step 40: Player4 >>> Player5
Step 41: Player5 >>> Player1
Step 42: Player1 >>> Player5
Step 43: Player5 >>> Player3
Step 44: Player3 >>> Player5
Step 45: Player5 >>> Player2
Step 46: Player2 >>> Player3
Step 47: Player3 >>> Player2
Step 48: Player2 >>> Player5
Step 49: Player5 >>> Player4
Step 50: Player4 >>> Player2
Step 51: Player2 >>> Player5
Step 52: Player5 >>> Player1
Step 53: Player1 >>> Player5
Step 54: Player5 >>> Player3
Step 55: Player3 >>> Player5
Step 56: Player5 >>> Player2
Step 57: Player2 >>> Player1
Step 58: Player1 >>> Player4
Step 59: Player4 >>> Player1
Step 60: Player1 >>> Player4
Step 61: Player4 >>> Player3
Step 62: Player3 >>> Player2
Step 63: Player2 >>> Player5
Step 64: Player5 >>> Player4
Step 65: Player4 >>> Player5
Step 66: Player5 >>> Player1
Step 67: Player1 >>> Player5
Step 68: Player5 >>> Player3
Step 69: Player3 >>> Player4
Step 70: Player4 >>> Player2
Step 71: Player2 >>> Player5
Step 72: Player5 >>> Player2
Step 73: Player2 >>> Player1
Step 74: Player1 >>> Player4
Step 75: Player4 >>> Player1
Step 76: Player1 >>> Player2
Step 77: Player2 >>> Player5
Step 78: Player5 >>> Player4
Step 79: Player4 >>> Player3
Step 80: Player3 >>> Player1
Step 81: Player1 >>> Player5
Step 82: Player5 >>> Player1
Step 83: Player1 >>> Player4
Step 84: Player4 >>> Player5
Step 85: Player5 >>> Player3
Step 86: Player3 >>> Player5
Step 87: Player5 >>> Player2
Step 88: Player2 >>> Player3
Player2: I'm out!
Step 89: Player3 >>> Player4
... player Player2 is out ...
Step 90: Player4 >>> Player1
Step 91: Player1 >>> Player3
Step 92: Player3 >>> Player1
Step 93: Player1 >>> Player4
Step 94: Player4 >>> Player3
Step 95: Player3 >>> Player5
Step 96: Player5 >>> Player1
Step 97: Player1 >>> Player5
Step 98: Player5 >>> Player3
Step 99: Player3 >>> Player5
Step 100: Player5 >>> Player4
Step 101: Player4 >>> Player5
Player4: I'm out!
... player Player4 is out ...
Step 102: Player5 >>> Player1
Step 103: Player1 >>> Player3
Step 104: Player3 >>> Player1
Step 105: Player1 >>> Player3
Step 106: Player3 >>> Player5
Step 107: Player5 >>> Player3
Step 108: Player3 >>> Player1
Step 109: Player1 >>> Player3
Step 110: Player3 >>> Player5
Step 111: Player5 >>> Player1
Step 112: Player1 >>> Player3
Step 113: Player3 >>> Player5
Step 114: Player5 >>> Player3
Step 115: Player3 >>> Player1
Step 116: Player1 >>> Player3
Step 117: Player3 >>> Player5
Step 118: Player5 >>> Player1
Step 119: Player1 >>> Player3
Step 120: Player3 >>> Player5
Step 121: Player5 >>> Player3
Player5: I'm out!
... player Player5 is out ...
Step 122: Player3 >>> Player5
Step 123: Player5 >>> Player1
Player5: I'm out!
Step 124: Player1 >>> Player3
... player Player5 is out ...
Step 125: Player3 >>> Player1
Step 126: Player1 >>> Player3
Player1: I'm out!
... player Player1 is out ...
Step 127: Player3 >>> Player3
Player3: I'm out!
Step 128: Player3 >>> Player3
... player Player3 is out ...
Player3: I'm out!
Stop!
Step 129: Player3 >>> Player3
Player3: I'm out!

ืžื›ืœ ื–ื” ื ื™ืชืŸ ืœื”ืกื™ืง ืžืกืคืจ ืžืกืงื ื•ืช ื—ืฉื•ื‘ื•ืช:

  • ืื ื”ื›ืœื™ื ื”ื“ืจื•ืฉื™ื ื–ืžื™ื ื™ื, ืžืคืชื—ื™ ื™ื™ืฉื•ืžื™ื ื™ื›ื•ืœื™ื ืœื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื•ืช ืื™ื ื˜ื’ืจืฆื™ื” ื‘ื™ืŸ ื™ื™ืฉื•ืžื™ื ืžื‘ืœื™ ืœื”ืชื ืชืง ืžื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™;
  • ื ื™ืชืŸ ืœื”ืกืชื™ืจ ืืช ื”ืžื•ืจื›ื‘ื•ืช (ื”ืžื•ืจื›ื‘ื•ืช) ืฉืœ ืžืฉื™ืžืช ืื™ื ื˜ื’ืจืฆื™ื” ื”ื“ื•ืจืฉืช ื›ื™ืฉื•ืจื™ื ื”ื ื“ืกื™ื™ื ื‘ืชื•ืš ื”ืžืกื’ืจืช ืื ื”ื™ื ื ืงื‘ืขื” ื‘ืชื—ื™ืœื” ื‘ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืžืกื’ืจืช. ืœื ื ื™ืชืŸ ืœื”ืกืชื™ืจ ืืช ื”ืงื•ืฉื™ ืฉืœ ื”ืžืฉื™ืžื” (ืงื•ืฉื™), ื•ืœื›ืŸ ื”ืคืชืจื•ืŸ ืœืžืฉื™ืžื” ืงืฉื” ื‘ืงื•ื“ ื™ื™ืจืื” ื‘ื”ืชืื;
  • ื›ืืฉืจ ืžืคืชื—ื™ื ืœื•ื’ื™ืงื” ืฉืœ ืื™ื ื˜ื’ืจืฆื™ื”, ื™ืฉ ืฆื•ืจืš ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืขืงื‘ื™ื•ืช ื•ืืช ื”ื™ืขื“ืจ ื”ืœื™ื ื™ืืจื™ื–ืฆื™ื” ืฉืœ ืฉื™ื ื•ื™ ื”ืžื“ื™ื ื” ืฉืœ ื›ืœ ืžืฉืชืชืคื™ ื”ืื™ื ื˜ื’ืจืฆื™ื”. ื–ื” ืžืืœืฅ ืื•ืชื ื• ืœืกื‘ืš ืืช ื”ื”ื™ื’ื™ื•ืŸ ื›ื“ื™ ืœื”ืคื•ืš ืื•ืชื• ืœื—ืกืจ ืจื’ื™ืฉื•ืช ืœืกื“ืจ ืฉื‘ื• ืžืชืจื—ืฉื™ื ืื™ืจื•ืขื™ื ื—ื™ืฆื•ื ื™ื™ื. ื‘ื“ื•ื’ืžื” ืฉืœื ื•, ื”ืฉื—ืงืŸ ื ืืœืฅ ืœืงื—ืช ื—ืœืง ื‘ืžืฉื—ืง ืœืื—ืจ ืฉื”ื•ื ืžื•ื“ื™ืข ืขืœ ื™ืฆื™ืืชื• ืžื”ืžืฉื—ืง: ืฉื—ืงื ื™ื ืื—ืจื™ื ื™ืžืฉื™ื›ื• ืœื”ืขื‘ื™ืจ ืœื• ืืช ื”ื›ื“ื•ืจ ืขื“ ืฉื”ืžื™ื“ืข ืขืœ ื™ืฆื™ืืชื• ื™ื’ื™ืข ื•ื™ืขื•ื‘ื“ ืขืœ ื™ื“ื™ ื›ืœ ื”ืžืฉืชืชืคื™ื. ื”ื™ื’ื™ื•ืŸ ื–ื” ืื™ื ื• ื ื•ื‘ืข ืžื—ื•ืงื™ ื”ืžืฉื—ืง ื•ืžื”ื•ื•ื” ืคืชืจื•ืŸ ืคืฉืจื” ื‘ืžืกื’ืจืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื”ื ื‘ื—ืจืช.

ืœืื—ืจ ืžื›ืŸ, ื‘ื•ืื• ื ื“ื‘ืจ ืขืœ ื”ื“ืงื•ื™ื•ืช ื”ืฉื•ื ื•ืช ืฉืœ ื”ืคืชืจื•ืŸ ืฉืœื ื•, ืคืฉืจื•ืช ื•ื ืงื•ื“ื•ืช ื ื•ืกืคื•ืช.

ื›ืœ ื”ื”ื•ื“ืขื•ืช ื‘ืชื•ืจ ืื—ื“

ื›ืœ ื”ืืคืœื™ืงืฆื™ื•ืช ื”ืžืฉื•ืœื‘ื•ืช ืคื•ืขืœื•ืช ืขื ืืคื™ืง ืื™ื ื˜ื’ืจืฆื™ื” ืื—ื“, ื”ืžื•ืฆื’ ื›ืžืชื•ื•ืš ื—ื™ืฆื•ื ื™, BPMQueue ืื—ื“ ืœื”ื•ื“ืขื•ืช ื•ื ื•ืฉื BPMTopic ืื—ื“ ืœืื•ืชื•ืช (ืื™ืจื•ืขื™ื). ื”ืขื‘ืจืช ื›ืœ ื”ื”ื•ื“ืขื•ืช ื“ืจืš ืชื•ืจ ื‘ื•ื“ื“ ื”ื™ื ื›ืฉืœืขืฆืžื” ืคืฉืจื”. ื‘ืจืžืช ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™, ื›ืขืช ืชื•ื›ืœื• ืœื”ืฆื™ื’ ื›ืžื” ืกื•ื’ื™ื ื—ื“ืฉื™ื ืฉืœ ื”ื•ื“ืขื•ืช ืฉืชืจืฆื• ืžื‘ืœื™ ืœื‘ืฆืข ืฉื™ื ื•ื™ื™ื ื‘ืžื‘ื ื” ื”ืžืขืจื›ืช. ื–ื”ื• ืคื™ืฉื•ื˜ ืžืฉืžืขื•ืชื™, ืืš ื˜ื•ืžืŸ ื‘ื—ื•ื‘ื• ืกื™ื›ื•ื ื™ื ืžืกื•ื™ืžื™ื, ืืฉืจ ื‘ื”ืงืฉืจ ืฉืœ ื”ืžืฉื™ืžื•ืช ื”ืื•ืคื™ื™ื ื™ื•ืช ืฉืœื ื•, ื ืจืื• ืœื ื• ืœื ื›ืœ ื›ืš ืžืฉืžืขื•ืชื™ื™ื.

ืื™ื ื˜ื’ืจืฆื™ื” ื‘ืกื’ื ื•ืŸ BPM

ืขื ื–ืืช, ื™ืฉ ื›ืืŸ ืขื“ื™ื ื•ืช ืื—ืช: ื›ืœ ืืคืœื™ืงืฆื™ื” ืžืกื ื ืช ืืช ื”ื”ื•ื“ืขื•ืช "ืฉืœื”" ืžื”ืชื•ืจ ื‘ื›ื ื™ืกื”, ืœืคื™ ืฉื ื”ื“ื•ืžื™ื™ืŸ ืฉืœื”. ื›ืžื• ื›ืŸ, ื ื™ืชืŸ ืœืฆื™ื™ืŸ ืืช ื”ืชื—ื•ื ื‘ืกื™ื’ื ืœื™ื, ืื ืฆืจื™ืš ืœื”ื’ื‘ื™ืœ ืืช ื”"ื”ื™ืงืฃ" ืฉืœ ื”ืื•ืช ืœืืคืœื™ืงืฆื™ื” ื‘ื•ื“ื“ืช. ื–ื” ืืžื•ืจ ืœื”ื’ื“ื™ืœ ืืช ืจื•ื—ื‘ ื”ืคืก ืฉืœ ื”ืื•ื˜ื•ื‘ื•ืก, ืื‘ืœ ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื—ื™ื™ื‘ ืœืคืขื•ืœ ื›ืขืช ืขื ืฉืžื•ืช ื“ื•ืžื™ื™ืŸ: ื—ื•ื‘ื” ืœื”ืชื™ื™ื—ืกื•ืช ืœื”ื•ื“ืขื•ืช, ืจืฆื•ื™ ืœืื•ืชื•ืช.

ื”ื‘ื˜ื—ืช ื”ืืžื™ื ื•ืช ืฉืœ ืืคื™ืง ื”ืื™ื ื˜ื’ืจืฆื™ื”

ืืžื™ื ื•ืช ืžื•ืจื›ื‘ืช ืžื›ืžื” ื“ื‘ืจื™ื:

  • ืžืชื•ื•ืš ื”ื”ื•ื“ืขื•ืช ื”ื ื‘ื—ืจ ื”ื•ื ืžืจื›ื™ื‘ ืงืจื™ื˜ื™ ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื” ื•ื ืงื•ื“ืช ื›ืฉืœ ืื—ืช: ืขืœื™ื• ืœื”ื™ื•ืช ืžืกืคื™ืง ืกื•ื‘ืœื ื™ ืœืชืงืœื•ืช. ืขืœื™ืš ืœื”ืฉืชืžืฉ ืจืง ื‘ื™ื™ืฉื•ืžื™ื ืฉื ื‘ื“ืงื• ื‘ื–ืžืŸ ืขื ืชืžื™ื›ื” ื˜ื•ื‘ื” ื•ืงื”ื™ืœื” ื’ื“ื•ืœื”;
  • ื™ืฉ ืฆื•ืจืš ืœื”ื‘ื˜ื™ื— ื–ืžื™ื ื•ืช ื’ื‘ื•ื”ื” ืฉืœ ืžืชื•ื•ืš ื”ื”ื•ื“ืขื•ืช, ืฉืขื‘ื•ืจื• ื™ืฉ ืœื”ืคืจื™ื“ ืื•ืชื• ืคื™ื–ื™ืช ืžื”ื™ื™ืฉื•ืžื™ื ื”ืžืฉื•ืœื‘ื™ื (ื–ืžื™ื ื•ืช ื’ื‘ื•ื”ื” ืฉืœ ืืคืœื™ืงืฆื™ื•ืช ืขื ืœื•ื’ื™ืงื” ืขืกืงื™ืช ื™ื™ืฉื•ืžื™ืช ื”ื™ื ื”ืจื‘ื” ื™ื•ืชืจ ืงืฉื” ื•ื™ืงืจื” ืœืกืคืง);
  • ื”ืžืชื•ื•ืš ืžื—ื•ื™ื‘ ืœืกืคืง ืขืจื‘ื•ื™ื•ืช ืžืกื™ืจื” "ืœืคื—ื•ืช ืคืขื ืื—ืช". ื–ื•ื”ื™ ื“ืจื™ืฉื” ื—ื•ื‘ื” ืœืคืขื•ืœื” ืืžื™ื ื” ืฉืœ ืืคื™ืง ื”ืื™ื ื˜ื’ืจืฆื™ื”. ืื™ืŸ ืฆื•ืจืš ื‘ื”ื‘ื˜ื—ื•ืช ื‘ืจืžื” ืฉืœ "ืคืขื ืื—ืช ื‘ื“ื™ื•ืง": ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืœืจื•ื‘ ืื™ื ื ืจื’ื™ืฉื™ื ืœื”ื’ืขืช ื”ื•ื“ืขื•ืช ืื• ืื™ืจื•ืขื™ื ื—ื•ื–ืจื•ืช ื•ื ืฉื ื•ืช, ื•ื‘ืžืฉื™ืžื•ืช ืžื™ื•ื—ื“ื•ืช ืฉื‘ื”ืŸ ื–ื” ื—ืฉื•ื‘, ืงืœ ื™ื•ืชืจ ืœื”ื•ืกื™ืฃ ื‘ื“ื™ืงื•ืช ื ื•ืกืคื•ืช ืœื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืžืืฉืจ ืœื”ืฉืชืžืฉ ื›ืœ ื”ื–ืžืŸ ืขืจื‘ื•ื™ื•ืช "ื™ืงืจื•ืช" ืœืžื“ื™;
  • ืฉืœื™ื—ืช ื”ื•ื“ืขื•ืช ื•ืื•ืชื•ืช ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืžืขื•ืจื‘ืช ื‘ืขืกืงื” ืžืฉื•ืชืคืช ืขื ืฉื™ื ื•ื™ ื‘ืžืฆื‘ ื”ืชื”ืœื™ื›ื™ื ื”ืขืกืงื™ื™ื ื•ื ืชื•ื ื™ ื”ืชื—ื•ื. ื”ืืคืฉืจื•ืช ื”ืžื•ืขื“ืคืช ืชื”ื™ื” ืœื”ืฉืชืžืฉ ื‘ืชื‘ื ื™ืช ืชื™ื‘ืช ื“ื•ืืจ ืขืกืงื™ืช, ืื‘ืœ ื–ื” ื™ื“ืจื•ืฉ ื˜ื‘ืœื” ื ื•ืกืคืช ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ื•ืžืžืกืจ. ื‘ื™ื™ืฉื•ืžื™ JEE, ื ื™ืชืŸ ืœืคืฉื˜ ื–ืืช ืขืœ ื™ื“ื™ ืฉื™ืžื•ืฉ ื‘ืžื ื”ืœ JTA ืžืงื•ืžื™, ืืš ื”ื—ื™ื‘ื•ืจ ืœืžืชื•ื•ืš ืฉื ื‘ื—ืจ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืขื‘ื•ื“ ื‘ืžืฆื‘ XA;
  • ืžื˜ืคืœื™ื ืฉืœ ื”ื•ื“ืขื•ืช ื•ืื™ืจื•ืขื™ื ื ื›ื ืกื™ื ื—ื™ื™ื‘ื™ื ืœืขื‘ื•ื“ ื’ื ืขื ื”ืขืกืงื” ืฉืœ ืฉื™ื ื•ื™ ืžืฆื‘ ื”ืชื”ืœื™ืš ื”ืขืกืงื™: ืื ืขืกืงื” ื›ื–ื• ืžืชื’ืœื’ืœืช ืœืื—ื•ืจ, ืื–ื™ ื™ืฉ ืœื‘ื˜ืœ ื’ื ืืช ืงื‘ืœืช ื”ื”ื•ื“ืขื”;
  • ื”ื•ื“ืขื•ืช ืฉืœื ื ื™ืชืŸ ื”ื™ื” ืœื”ืขื‘ื™ืจ ืขืงื‘ ืฉื’ื™ืื•ืช ื™ืฉ ืœืื—ืกืŸ ื‘ื—ื ื•ืช ื ืคืจื“ืช D.L.Q. (ืชื•ืจ ืื•ืชื™ื•ืช ืžืชื•ืช). ืœืฉื ื›ืš, ื™ืฆืจื ื• ืžื™ืงืจื•-ืฉื™ืจื•ืช ืคืœื˜ืคื•ืจืžื” ื ืคืจื“ ื”ืžืื—ืกืŸ ื”ื•ื“ืขื•ืช ื›ืืœื” ื‘ืื—ืกื•ืŸ ืฉืœื•, ืžื•ืกื™ืฃ ืื•ืชืŸ ืœืคื™ ืชื›ื•ื ื•ืช (ืœืงื™ื‘ื•ืฅ ื•ื—ื™ืคื•ืฉ ืžื”ื™ืจ), ื•ื—ื•ืฉืฃ ืืช ื”-API ืœืฆืคื™ื™ื”, ืฉืœื™ื—ื” ืžื—ื“ืฉ ืœื›ืชื•ื‘ืช ื”ื™ืขื“ ื•ืžื—ื™ืงืช ื”ื•ื“ืขื•ืช. ืžื ื”ืœื™ ืžืขืจื›ืช ื™ื›ื•ืœื™ื ืœืขื‘ื•ื“ ืขื ืฉื™ืจื•ืช ื–ื” ื“ืจืš ืžืžืฉืง ื”ืื™ื ื˜ืจื ื˜ ืฉืœื”ื;
  • ื‘ื”ื’ื“ืจื•ืช ื”ืžืชื•ื•ืš, ืืชื” ืฆืจื™ืš ืœื”ืชืื™ื ืืช ืžืกืคืจ ื ื™ืกื™ื•ื ื•ืช ื”ืžืกื™ืจื” ื•ื”ืขื™ื›ื•ื‘ื™ื ื‘ื™ืŸ ืžืฉืœื•ื—ื™ื ื›ื“ื™ ืœื”ืคื—ื™ืช ืืช ื”ืกื‘ื™ืจื•ืช ืฉืœ ื”ื•ื“ืขื•ืช ืœื”ื™ื›ื ืก ืœ-DLQ (ื›ืžืขื˜ ื‘ืœืชื™ ืืคืฉืจื™ ืœื—ืฉื‘ ืืช ื”ืคืจืžื˜ืจื™ื ื”ืื•ืคื˜ื™ืžืœื™ื™ื, ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืœืคืขื•ืœ ื‘ืื•ืคืŸ ืืžืคื™ืจื™ ื•ืœื”ืชืื™ื ืื•ืชื ื‘ืžื”ืœืš ืžื‘ืฆืข);
  • ื™ืฉ ืœื ื˜ืจ ืืช ื—ื ื•ืช DLQ ื‘ืื•ืคืŸ ืจืฆื™ืฃ, ื•ืžืขืจื›ืช ื”ื ื™ื˜ื•ืจ ืฆืจื™ื›ื” ืœื”ื•ื“ื™ืข โ€‹โ€‹ืœืžื ื”ืœื™ ื”ืžืขืจื›ืช ื›ื“ื™ ืฉื™ื•ื›ืœื• ืœื”ื’ื™ื‘ ื‘ืžื”ื™ืจื•ืช ื”ืืคืฉืจื™ืช ื›ืืฉืจ ืžืชืจื—ืฉื•ืช ื”ื•ื“ืขื•ืช ืฉืœื ื ืžืกืจื•. ื–ื” ื™ืงื˜ื™ืŸ ืืช "ืื–ื•ืจ ื”ื ื–ืง" ืฉืœ ื›ืฉืœ ืื• ืฉื’ื™ืืช ืœื•ื’ื™ืงื” ืขืกืงื™ืช;
  • ืืคื™ืง ื”ืื™ื ื˜ื’ืจืฆื™ื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื—ืกืจ ืจื’ื™ืฉื•ืช ืœื”ื™ืขื“ืจ ื–ืžื ื™ ืฉืœ ืืคืœื™ืงืฆื™ื•ืช: ืžื ื•ื™ื™ ื ื•ืฉื ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ืขืžื™ื“ื™ื, ื•ืฉื ื”ื“ื•ืžื™ื™ืŸ ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื™ื™ื—ื•ื“ื™ ื›ื“ื™ ืฉืžื™ืฉื”ื• ืื—ืจ ืœื ื™ื ืกื” ืœืขื‘ื“ ืืช ื”ื”ื•ื“ืขื” ืฉืœื• ืžื”ืชื•ืจ ื‘ื–ืžืŸ ื”ื™ืขื“ืจ ื”ืืคืœื™ืงืฆื™ื”.

ื”ื‘ื˜ื—ืช ื‘ื˜ื™ื—ื•ืช ื”ื—ื•ื˜ื™ื ืฉืœ ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™

ืื•ืชื• ืžื•ืคืข ืฉืœ ืชื”ืœื™ืš ืขืกืงื™ ื™ื›ื•ืœ ืœืงื‘ืœ ืžืกืคืจ ื”ื•ื“ืขื•ืช ื•ืื™ืจื•ืขื™ื ื‘ื• ื–ืžื ื™ืช, ืฉืขื™ื‘ื•ื“ื ื™ืชื—ื™ืœ ื‘ืžืงื‘ื™ืœ. ื™ื—ื“ ืขื ื–ืืช, ืขื‘ื•ืจ ืžืคืชื— ืืคืœื™ืงืฆื™ื•ืช, ื”ื›ืœ ืฆืจื™ืš ืœื”ื™ื•ืช ืคืฉื•ื˜ ื•ื‘ื˜ื•ื— ื‘ืฉืจืฉื•ืจ.

ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืฉืœ ื”ืชื”ืœื™ืš ืžืขื‘ื“ ื›ืœ ืื™ืจื•ืข ื—ื™ืฆื•ื ื™ ื”ืžืฉืคื™ืข ืขืœ ืชื”ืœื™ืš ืขืกืงื™ ื–ื” ื‘ื ืคืจื“. ืื™ืจื•ืขื™ื ืืœื” ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช:

  • ื”ืฉืงืช ืžื•ืคืข ืชื”ืœื™ืš ืขืกืงื™;
  • ืคืขื•ืœืช ืžืฉืชืžืฉ ื”ืงืฉื•ืจื” ืœืคืขื™ืœื•ืช ื‘ืชื•ืš ื”ืชื”ืœื™ืš ื”ืขืกืงื™;
  • ืงื‘ืœืช ื”ื•ื“ืขื” ืื• ืื•ืช ืฉืืœื™ื”ื ืžื ื•ื™ ืžื•ืคืข ืฉืœ ืชื”ืœื™ืš ืขืกืงื™;
  • ืชืคื•ื’ื” ืฉืœ ื”ื˜ื™ื™ืžืจ ืฉื ืงื‘ืข ืขืœ ื™ื“ื™ ืžื•ืคืข ื”ืชื”ืœื™ืš ื”ืขืกืงื™;
  • ืคืขื•ืœืช ื‘ืงืจื” ื‘ืืžืฆืขื•ืช API (ืœืžืฉืœ ื”ืคืกืงืช ืชื”ืœื™ืš).

ื›ืœ ืื™ืจื•ืข ื›ื–ื” ื™ื›ื•ืœ ืœืฉื ื•ืช ืืช ื”ืžืฆื‘ ืฉืœ ืžื•ืคืข ืฉืœ ืชื”ืœื™ืš ืขืกืงื™: ืคืขื™ืœื•ื™ื•ืช ืžืกื•ื™ืžื•ืช ื™ื›ื•ืœื•ืช ืœื”ืกืชื™ื™ื ื•ืื—ืจื•ืช ืœื”ืชื—ื™ืœ, ื”ืขืจื›ื™ื ืฉืœ ื ื›ืกื™ื ืžืชืžืฉื›ื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชื ื•ืช. ืกื’ื™ืจืช ืคืขื™ืœื•ืช ื›ืœืฉื”ื™ ืขืœื•ืœื” ืœื’ืจื•ื ืœื”ืคืขืœื” ืฉืœ ืื—ืช ืื• ื™ื•ืชืจ ืžื”ืคืขื™ืœื•ื™ื•ืช ื”ื‘ืื•ืช. ืืœื”, ื‘ืชื•ืจื, ื™ื›ื•ืœื™ื ืœื”ืคืกื™ืง ืœื—ื›ื•ืช ืœืื™ืจื•ืขื™ื ืื—ืจื™ื, ืื•, ืื ื”ื ืœื ืฆืจื™ื›ื™ื ื ืชื•ื ื™ื ื ื•ืกืคื™ื, ื”ื ื™ื›ื•ืœื™ื ืœื”ืฉืœื™ื ื‘ืื•ืชื” ืขืกืงื”. ืœืคื ื™ ืกื’ื™ืจืช ื”ืขืกืงื”, ื”ืžืฆื‘ ื”ื—ื“ืฉ ืฉืœ ื”ืชื”ืœื™ืš ื”ืขืกืงื™ ื ืฉืžืจ ื‘ื‘ืกื™ืก ื”ื ืชื•ื ื™ื, ืฉื ื™ืžืชื™ืŸ ืœืื™ืจื•ืข ื”ื—ื™ืฆื•ื ื™ ื”ื‘ื.

ื ืชื•ื ื™ ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืžืชืžืฉื›ื™ื ื”ืžืื•ื—ืกื ื™ื ื‘ืžืกื“ ื ืชื•ื ื™ื ื™ื—ืกื™ ื”ื ื ืงื•ื“ืช ืกื ื›ืจื•ืŸ ืขื™ื‘ื•ื“ ื ื•ื—ื” ืžืื•ื“ ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-SELECT FOR UPDATE. ืื ืขืกืงื” ืื—ืช ื”ืฆืœื™ื—ื” ืœื”ื‘ื™ื ืืช ืžืฆื‘ ื”ืชื”ืœื™ืš ื”ืขืกืงื™ ืžื”ืžืกื“ ื›ื“ื™ ืœืฉื ื•ืช ืื•ืชื•, ืื– ืืฃ ืขืกืงื” ืื—ืจืช ื‘ืžืงื‘ื™ืœ ืœื ืชื•ื›ืœ ืœืงื‘ืœ ืืช ืื•ืชื• ืžืฆื‘ ืœืฉื™ื ื•ื™ ืื—ืจ, ื•ืœืื—ืจ ื”ืฉืœืžืช ื”ืขืกืงื” ื”ืจืืฉื•ื ื”, ื”ืฉื ื™ื™ื” ื”ื™ื ืžื•ื‘ื˜ื— ืœืงื‘ืœ ืืช ื”ืžืฆื‘ ืฉื›ื‘ืจ ื”ืฉืชื ื”.

ื‘ืืžืฆืขื•ืช ืžื ืขื•ืœื™ื ืคืกื™ืžื™ื™ื ื‘ืฆื“ DBMS, ืื ื• ืขื•ืžื“ื™ื ื‘ื›ืœ ื”ื“ืจื™ืฉื•ืช ื”ื ื“ืจืฉื•ืช ACID, ื•ื’ื ืœืฉืžื•ืจ ืขืœ ื”ื™ื›ื•ืœืช ืœืฉื ื•ืช ืืช ื”ื™ื™ืฉื•ื ืขื ื”ื™ื’ื™ื•ืŸ ืขืกืงื™ ืขืœ ื™ื“ื™ ื”ื’ื“ืœืช ืžืกืคืจ ื”ืžื•ืคืขื™ื ื”ืคื•ืขืœื™ื.

ืขื ื–ืืช, ืžื ืขื•ืœื™ื ืคืกื™ืžื™ื™ื ืžืื™ื™ืžื™ื ืขืœื™ื ื• ื‘ืงื™ืคืื•ืŸ, ืžื” ืฉืื•ืžืจ ืฉ-SELECT FOR UPDATE ืขื“ื™ื™ืŸ ืฆืจื™ืš ืœื”ื™ื•ืช ืžื•ื’ื‘ืœ ืœื–ืžืŸ ืงืฆื•ื‘ ืกื‘ื™ืจ ื›ืœืฉื”ื• ื‘ืžืงืจื” ืฉืœ ืžื‘ื•ื™ ืกืชื•ื ืขืœ ื›ืžื” ืžืงืจื™ื ื—ืจื™ืคื™ื ื‘ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™.

ื‘ืขื™ื” ื ื•ืกืคืช ื”ื™ื ืกื ื›ืจื•ืŸ ืชื—ื™ืœืช ื”ืชื”ืœื™ืš ื”ืขืกืงื™. ืืžื ื ืื™ืŸ ืžื•ืคืข ืฉืœ ืชื”ืœื™ืš ืขืกืงื™, ืื‘ืœ ื’ื ืื™ืŸ ืžืฆื‘ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื, ื›ืš ืฉื”ืฉื™ื˜ื” ื”ืžืชื•ืืจืช ืœื ืชืขื‘ื•ื“. ืื ืืชื” ืจื•ืฆื” ืœื”ื‘ื˜ื™ื— ืืช ื”ื™ื™ื—ื•ื“ื™ื•ืช ืฉืœ ืžื•ืคืข ืฉืœ ืชื”ืœื™ืš ืขืกืงื™ ื‘ื”ื™ืงืฃ ืžืกื•ื™ื, ืื– ืืชื” ืฆืจื™ืš ืกื•ื’ ืฉืœ ืื•ื‘ื™ื™ืงื˜ ืกื ื›ืจื•ืŸ ื”ืžืฉื•ื™ืš ืœืžื—ืœืงืช ื”ืชื”ืœื™ืš ื•ืœื”ื™ืงืฃ ื”ืžืชืื™ื. ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื” ื–ื•, ืื ื• ืžืฉืชืžืฉื™ื ื‘ืžื ื’ื ื•ืŸ ื ืขื™ืœื” ืื—ืจ ื”ืžืืคืฉืจ ืœื ื• ืœื ืขื•ืœ ืžืฉืื‘ ืฉืจื™ืจื•ืชื™ ืฉืฆื•ื™ืŸ ืขืœ ื™ื“ื™ ืžืคืชื— ื‘ืคื•ืจืžื˜ URI ื‘ืืžืฆืขื•ืช ืฉื™ืจื•ืช ื—ื™ืฆื•ื ื™.

ื‘ื“ื•ื’ืžืื•ืช ืฉืœื ื•, ื”ืชื”ืœื™ืš ื”ืขืกืงื™ ืฉืœ InitialPlayer ืžื›ื™ืœ ื”ืฆื”ืจื”

uniqueConstraint = UniqueConstraints.singleton

ืœื›ืŸ, ื”ื™ื•ืžืŸ ืžื›ื™ืœ ื”ื•ื“ืขื•ืช ืขืœ ืœืงื™ื—ืช ื•ืฉื—ืจื•ืจ ื”ืžื ืขื•ืœ ืฉืœ ื”ืžืคืชื— ื”ืžืชืื™ื. ืื™ืŸ ื”ื•ื“ืขื•ืช ื›ืืœื” ืขื‘ื•ืจ ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ืื—ืจื™ื: uniqueConstraint ืœื ืžื•ื’ื“ืจ.

ื‘ืขื™ื•ืช ื‘ืชื”ืœื™ืš ืขืกืงื™ ืขื ืžืฆื‘ ืžืชืžืฉืš

ืœืคืขืžื™ื ืžืฆื‘ ืžืชืžืฉืš ืœื ืจืง ืขื•ื–ืจ, ืืœื ื’ื ืžืžืฉ ืžืขื›ื‘ ืืช ื”ื”ืชืคืชื—ื•ืช.
ื”ื‘ืขื™ื•ืช ืžืชื—ื™ืœื•ืช ื›ืืฉืจ ืืชื” ืฆืจื™ืš ืœื‘ืฆืข ืฉื™ื ื•ื™ื™ื ื‘ืœื•ื’ื™ืงื” ื”ืขืกืงื™ืช ื•/ืื• ืžื•ื“ืœ ื”ืชื”ืœื™ืš ื”ืขืกืงื™. ืœื ื ืžืฆื ืฉืฉื™ื ื•ื™ ื›ื–ื” ืชื•ืื ืืช ื”ืžืฆื‘ ื”ื™ืฉืŸ ืฉืœ ื”ืชื”ืœื™ื›ื™ื ื”ืขืกืงื™ื™ื. ืื ื™ืฉ ื”ืจื‘ื” ืžื•ืคืขื™ื "ื—ื™ื™ื" ื‘ืžืกื“ ื”ื ืชื•ื ื™ื, ืื– ื‘ื™ืฆื•ืข ืฉื™ื ื•ื™ื™ื ืœื ืชื•ืืžื™ื ืขืœื•ืœ ืœื’ืจื•ื ืœื‘ืขื™ื•ืช ืจื‘ื•ืช, ื‘ื”ืŸ ื ืชืงืœื ื• ืœืขื™ืชื™ื ืงืจื•ื‘ื•ืช ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-jBPM.

ื‘ื”ืชืื ืœืขื•ืžืง ื”ืฉื™ื ื•ื™, ืชื•ื›ืœ ืœืคืขื•ืœ ื‘ืฉืชื™ ื“ืจื›ื™ื:

  1. ืœื™ืฆื•ืจ ืกื•ื’ ื—ื“ืฉ ืฉืœ ืชื”ืœื™ืš ืขืกืงื™ ื›ื“ื™ ืœื ืœื‘ืฆืข ืฉื™ื ื•ื™ื™ื ืœื ืชื•ืืžื™ื ืœื™ืฉืŸ, ื•ืœื”ืฉืชืžืฉ ื‘ื• ื‘ืžืงื•ื ื”ื™ืฉืŸ ื‘ืขืช โ€‹โ€‹ื”ืคืขืœืช ืžื•ืคืขื™ื ื—ื“ืฉื™ื. ืžื•ืคืขื™ื ื™ืฉื ื™ื ื™ืžืฉื™ื›ื• ืœืขื‘ื•ื“ "ื‘ื“ืจืš ื”ื™ืฉื ื”";
  2. ื”ืขื‘ืจ ืืช ื”ืžืฆื‘ ื”ืžืชืžืฉืš ืฉืœ ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ื‘ืขืช ืขื“ื›ื•ืŸ ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™.

ื”ื“ืจืš ื”ืจืืฉื•ื ื” ืคืฉื•ื˜ื” ื™ื•ืชืจ, ืืš ื™ืฉ ืœื” ืžื’ื‘ืœื•ืช ื•ื—ืกืจื•ื ื•ืช, ืœืžืฉืœ:

  • ืฉื›ืคื•ืœ ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื‘ืžื•ื“ืœื™ื ืจื‘ื™ื ืฉืœ ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื, ืขืœื™ื™ื” ื‘ื”ื™ืงืฃ ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™;
  • ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื ื“ืจืฉ ืžืขื‘ืจ ืžื™ื™ื“ื™ ืœื”ื™ื’ื™ื•ืŸ ืขืกืงื™ ื—ื“ืฉ (ื›ืžืขื˜ ืชืžื™ื“ ื‘ืžื•ื ื—ื™ื ืฉืœ ืžืฉื™ืžื•ืช ืื™ื ื˜ื’ืจืฆื™ื”);
  • ื”ืžืคืชื— ืœื ื™ื•ื“ืข ื‘ืื™ื–ื” ืฉืœื‘ ืืคืฉืจ ืœืžื—ื•ืง ื“ื’ืžื™ื ืžื™ื•ืฉื ื™ื.

ื‘ืคื•ืขืœ, ืื ื• ืžืฉืชืžืฉื™ื ื‘ืฉืชื™ ื”ื’ื™ืฉื•ืช, ืืš ืงื™ื‘ืœื ื• ืžืกืคืจ ื”ื—ืœื˜ื•ืช ื›ื“ื™ ืœืคืฉื˜ ืืช ื—ื™ื™ื ื•:

  • ื‘ืžืกื“ ื”ื ืชื•ื ื™ื, ื”ืžืฆื‘ ื”ืžืชืžืฉืš ืฉืœ ื”ืชื”ืœื™ืš ื”ืขืกืงื™ ืžืื•ื—ืกืŸ ื‘ืฆื•ืจื” ืงืœื” ืœืงืจื™ืื” ื•ืขื™ื‘ื•ื“ ืงืœื”: ื‘ืžื—ืจื•ื–ืช ืคื•ืจืžื˜ JSON. ื–ื” ืžืืคืฉืจ ืœืš ืœื‘ืฆืข ื”ืขื‘ืจื•ืช ื”ืŸ ื‘ืชื•ืš ื”ืืคืœื™ืงืฆื™ื” ื•ื”ืŸ ืžื—ื•ืฆื” ืœื”. ื‘ืžืงืจื™ื ืงื™ืฆื•ื ื™ื™ื, ืืชื” ื™ื›ื•ืœ ื’ื ืœืฆื‘ื•ื˜ ืื•ืชื• ืขื ื™ื“ื™ื•ืช (ืฉื™ืžื•ืฉื™ ื‘ืžื™ื•ื—ื“ ื‘ืคื™ืชื•ื— ื‘ืžื”ืœืš ืื™ืชื•ืจ ื‘ืื’ื™ื);
  • ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ืฉืœ ื”ืื™ื ื˜ื’ืจืฆื™ื” ืื™ื ื• ืžืฉืชืžืฉ ื‘ืฉืžื•ืช ืฉืœ ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื, ื›ืš ืฉื‘ื›ืœ ืขืช ื ื™ืชืŸ ืœื”ื—ืœื™ืฃ ืืช ื”ื™ื™ืฉื•ื ืฉืœ ืื—ื“ ืžื”ืชื”ืœื™ื›ื™ื ื”ืžืฉืชืชืคื™ื ื‘ื—ื“ืฉ, ื‘ืฉื ื—ื“ืฉ (ืœื“ื•ื’ืžื”, "InitialPlayerV2"). ื”ืงื™ืฉื•ืจ ืžืชืจื—ืฉ ื‘ืืžืฆืขื•ืช ืฉืžื•ืช ืฉืœ ื”ื•ื“ืขื•ืช ื•ืื•ืชื•ืช;
  • ืœืžื•ื“ืœ ื”ืชื”ืœื™ืš ื™ืฉ ืžืกืคืจ ื’ืจืกื”, ืื•ืชื• ืื ื• ืžื’ื“ื™ืœื™ื ืื ืื ื• ืžื‘ืฆืขื™ื ืฉื™ื ื•ื™ื™ื ืœื ืชื•ืืžื™ื ื‘ืžื•ื“ืœ ื–ื”, ื•ืžืกืคืจ ื–ื” ื ืฉืžืจ ื™ื—ื“ ืขื ื”ืžืฆื‘ ืฉืœ ืžื•ืคืข ื”ืชื”ืœื™ืš;
  • ื”ืžืฆื‘ ื”ืžืชืžืฉืš ืฉืœ ื”ืชื”ืœื™ืš ื ืงืจื ืชื—ื™ืœื” ืžื”ื‘ืกื™ืก ืœืชื•ืš ืžื•ื“ืœ ืื•ื‘ื™ื™ืงื˜ ื ื•ื— ืฉื”ืœื™ืš ื”ื”ื’ื™ืจื” ื™ื›ื•ืœ ืœืขื‘ื•ื“ ืื™ืชื• ืื ืžืกืคืจ ื”ื’ืจืกื” ืฉืœ ื”ืžื•ื“ืœ ื”ืฉืชื ื”;
  • ื”ืœื™ืš ื”ื”ื’ื™ืจื” ืžืžื•ืงื ืœื™ื“ ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™ ื•ื ืงืจื "ืขืฆืœืŸ" ืขื‘ื•ืจ ื›ืœ ืžื•ืคืข ืฉืœ ื”ืชื”ืœื™ืš ื”ืขืกืงื™ ื‘ื–ืžืŸ ืฉื—ื–ื•ืจื• ืžืžืกื“ ื”ื ืชื•ื ื™ื;
  • ืื ืืชื” ืฆืจื™ืš ืœื”ืขื‘ื™ืจ ืืช ื”ืžืฆื‘ ืฉืœ ื›ืœ ืžื•ืคืขื™ ื”ืชื”ืœื™ืš ื‘ืžื”ื™ืจื•ืช ื•ื‘ืกื™ื ื›ืจื•ื ื™, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืคืชืจื•ื ื•ืช ื”ืขื‘ืจืช ืžืกื“ ื ืชื•ื ื™ื ืงืœืืกื™ื™ื ื™ื•ืชืจ, ืื‘ืœ ืืชื” ืฆืจื™ืš ืœืขื‘ื•ื“ ืขื JSON ืฉื.

ื”ืื ืื ื™ ืฆืจื™ืš ืขื•ื“ ืžืกื’ืจืช ืœืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื?

ื”ืคืชืจื•ื ื•ืช ื”ืžืชื•ืืจื™ื ื‘ืžืืžืจ ืืคืฉืจื• ืœื ื• ืœืคืฉื˜ ืžืฉืžืขื•ืชื™ืช ืืช ื—ื™ื™ื ื•, ืœื”ืจื—ื™ื‘ ืืช ืžื’ื•ื•ืŸ ื”ื‘ืขื™ื•ืช ืฉื ืคืชืจื• ื‘ืจืžืช ืคื™ืชื•ื— ื”ืืคืœื™ืงืฆื™ื•ืช, ื•ืœื”ืคื•ืš ืืช ื”ืจืขื™ื•ืŸ ืฉืœ ื”ืคืจื“ืช ืœื•ื’ื™ืงื” ืขืกืงื™ืช ืœืฉื™ืจื•ืชื™ ืžื™ืงืจื• ืœืื˜ืจืงื˜ื™ื‘ื™ื™ื ื™ื•ืชืจ. ืœืฉื ื›ืš ื ืขืฉืชื” ืขื‘ื•ื“ื” ืจื‘ื”, ื ื•ืฆืจื” ืžืกื’ืจืช "ืงืœืช ืžืฉืงืœ" ืžืื•ื“ ืœืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ื•ื›ืŸ ืจื›ื™ื‘ื™ ืฉื™ืจื•ืช ืœืคืชืจื•ืŸ ื”ื‘ืขื™ื•ืช ืฉื–ื•ื”ื• ื‘ื”ืงืฉืจ ืฉืœ ืžื’ื•ื•ืŸ ืจื—ื‘ ืฉืœ ืžืฉื™ืžื•ืช ื™ื™ืฉื•ืžื™ื•ืช. ื™ืฉ ืœื ื• ืจืฆื•ืŸ ืœืฉืชืฃ ืืช ื”ืชื•ืฆืื•ืช ื”ืœืœื•, ืœื”ื‘ื™ื ืืช ื”ืคื™ืชื•ื— ืฉืœ ืจื›ื™ื‘ื™ื ืžืฉื•ืชืคื™ื ืœื’ื™ืฉื” ืคืชื•ื—ื” ื‘ืจื™ืฉื™ื•ืŸ ื—ื•ืคืฉื™. ื–ื” ื™ื“ืจื•ืฉ ืงืฆืช ืžืืžืฅ ื•ื–ืžืŸ. ื”ื‘ื ืช ื”ื“ืจื™ืฉื” ืœืคืชืจื•ื ื•ืช ื›ืืœื” ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืชืžืจื™ืฅ ื ื•ืกืฃ ืขื‘ื•ืจื ื•. ื‘ืžืืžืจ ื”ืžื•ืฆืข ืžื•ืงื“ืฉ ืžืขื˜ ืžืื•ื“ ืชืฉื•ืžืช ืœื‘ ืœื™ื›ื•ืœื•ืช ื”ืžืกื’ืจืช ืขืฆืžื”, ืืš ื—ืœืงืŸ ื ืจืื•ืช ืžื”ื“ื•ื’ืžืื•ืช ื”ืžื•ืฆื’ื•ืช. ืื ื‘ื›ืœ ื–ืืช ื ืคืจืกื ืืช ื”ืžืกื’ืจืช ืฉืœื ื•, ื™ื•ืงื“ืฉ ืœื” ืžืืžืจ ื ืคืจื“. ื‘ื™ื ืชื™ื™ื, ื ื”ื™ื” ืืกื™ืจื™ ืชื•ื“ื” ืื ืชืฉืื™ืจื• ืžืฉื•ื‘ ืงื˜ืŸ ืขืœ ื™ื“ื™ ืชืฉื•ื‘ื” ืœืฉืืœื”:

ืจืง ืžืฉืชืžืฉื™ื ืจืฉื•ืžื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืชืฃ ื‘ืกืงืจ. ืœื”ืชื—ื‘ืจื‘ื‘ืงืฉื”.

ื”ืื ืื ื™ ืฆืจื™ืš ืขื•ื“ ืžืกื’ืจืช ืœืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื?

  • 18,8%ื›ืŸ, ืื ื™ ืžื—ืคืฉ ืžืฉื”ื• ื›ื–ื” ื›ื‘ืจ ื”ืจื‘ื” ื–ืžืŸ.

  • 12,5%ืžืขื ื™ื™ืŸ ืœืœืžื•ื“ ืขื•ื“ ืขืœ ื”ื™ื™ืฉื•ื ืฉืœืš, ื–ื” ืขืฉื•ื™ ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™2

  • 6,2%ืื ื• ืžืฉืชืžืฉื™ื ื‘ืื—ืช ืžื”ืžืกื’ืจื•ืช ื”ืงื™ื™ืžื•ืช, ืืš ืื ื• ืฉื•ืงืœื™ื ืœื”ื—ืœื™ืฃ ืื•ืชื”1

  • 18,8%ืื ื• ืžืฉืชืžืฉื™ื ื‘ืื—ืช ืžื”ืžืกื’ืจื•ืช ื”ืงื™ื™ืžื•ืช, ื”ื›ืœ ืžืชืื™ื3

  • 18,8%ื”ืชืžื•ื“ื“ื•ืช ืœืœื ืžืกื’ืจืช3

  • 25,0%ื›ืชื•ื‘ ื‘ืขืฆืžืš 4

16 ืžืฉืชืžืฉื™ื ื”ืฆื‘ื™ืขื•. 7 ืžืฉืชืžืฉื™ื ื ืžื ืขื•.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”