ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ Messenger (ื—ืœืง 1): ืขื™ืฆื•ื‘ ืžืกื’ืจืช ื”ื‘ืกื™ืก

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

ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ Messenger (ื—ืœืง 1): ืขื™ืฆื•ื‘ ืžืกื’ืจืช ื”ื‘ืกื™ืก
ื”ื‘ืกื™ืก ืฉืœื ื• ืœื ื™ื”ื™ื” ื›ืœ ื›ืš ื’ื“ื•ืœ ื•ืžืคื•ื–ืจ, ื›ืžื• VKontakte ืื• Badoo, ืื‘ืœ "ื›ืš ืฉื–ื” ื”ื™ื”", ืื‘ืœ ื–ื” ื”ื™ื” ื˜ื•ื‘ - ืคื•ื ืงืฆื™ื•ื ืœื™, ืžื”ื™ืจ ื• ืžืชืื™ื ืœืฉืจืช ืื—ื“ PostgreSQL - ื›ืš ืฉืชื•ื›ืœ ืœืคืจื•ืก ืžื•ืคืข ื ืคืจื“ ืฉืœ ื”ืฉื™ืจื•ืช ืื™ืคืฉื”ื• ื‘ืฆื“, ืœืžืฉืœ.

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

ืฉืœื‘ 1: ื›ืžื” ืคืจื˜ื™ื ืขืกืงื™ื™ื

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

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

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

ื‘ื•ืื• ื ืชืขื›ื‘ ืขืœ ืจืฉื™ืžื” ื–ื• ืฉืœ ืฆืจื›ื™ื "ื‘ืจื•ืจื™ื" ืœืขืช ืขืชื”.

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

ืฉืœื‘ 2: ืžืขื’ืœ ืœื•ื’ื™ ืžื™ื ื™ืžืœื™

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

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

ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ Messenger (ื—ืœืง 1): ืขื™ืฆื•ื‘ ืžืกื’ืจืช ื”ื‘ืกื™ืก

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

ืœืฆื™ื™ืจ ื“ื™ืื’ืจืžื•ืช ืคืฉื•ื˜ื•ืช ื›ื›ืœ ื”ืืคืฉืจ - ืจื•ื‘ ื”ืื ืฉื™ื ืฉืชืจืื” ืื•ืชื ืœื”ื ืื™ื ื ืžื•ืžื—ื™ื ื‘ืงืจื™ืืช UML/IDEF. ืื‘ืœ ื”ืงืคื“ ืœืฆื™ื™ืจ.

ืฉืœื‘ 3: ืฉืจื˜ื•ื˜ ืžื‘ื ื” ื”ื˜ื‘ืœื”

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

ืžื‘ื ื” ื”ื˜ื™ื•ื˜ื” ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœื ื• ื™ื™ืจืื” ื›ืš:
ื˜ื‘ืœืื•ืช: RU

CREATE TABLE "ะขะตะผะฐ"(
  "ะขะตะผะฐ"
    uuid
      PRIMARY KEY
, "ะ”ะพะบัƒะผะตะฝั‚"
    uuid
, "ะะฐะทะฒะฐะฝะธะต"
    text
);

CREATE TABLE "ะกะพะพะฑั‰ะตะฝะธะต"(
  "ะกะพะพะฑั‰ะตะฝะธะต"
    uuid
      PRIMARY KEY
, "ะขะตะผะฐ"
    uuid
, "ะะฒั‚ะพั€"
    uuid
, "ะ”ะฐั‚ะฐะ’ั€ะตะผั"
    timestamp
, "ะขะตะบัั‚"
    text
);

CREATE TABLE "ะะดั€ะตัะฐั‚"(
  "ะกะพะพะฑั‰ะตะฝะธะต"
    uuid
, "ะŸะตั€ัะพะฝะฐ"
    uuid
, PRIMARY KEY("ะกะพะพะฑั‰ะตะฝะธะต", "ะŸะตั€ัะพะฝะฐ")
);

CREATE TABLE "ะคะฐะนะป"(
  "ะคะฐะนะป"
    uuid
      PRIMARY KEY
, "ะกะพะพะฑั‰ะตะฝะธะต"
    uuid
, "BLOB"
    uuid
, "ะ˜ะผั"
    text
);

ื˜ื‘ืœืื•ืช: EN

CREATE TABLE theme(
  theme
    uuid
      PRIMARY KEY
, document
    uuid
, title
    text
);

CREATE TABLE message(
  message
    uuid
      PRIMARY KEY
, theme
    uuid
, author
    uuid
, dt
    timestamp
, body
    text
);

CREATE TABLE message_addressee(
  message
    uuid
, person
    uuid
, PRIMARY KEY(message, person)
);

CREATE TABLE message_file(
  file
    uuid
      PRIMARY KEY
, message
    uuid
, content
    uuid
, filename
    text
);

ื”ื“ื‘ืจ ื”ืคืฉื•ื˜ ื‘ื™ื•ืชืจ ื‘ืขืช ืชื™ืื•ืจ ืคื•ืจืžื˜ ื”ื•ื ืœื”ืชื—ื™ืœ "ืœื”ืชื™ืจ" ืืช ื’ืจืฃ ื”ื—ื™ื‘ื•ืจ ืžื˜ื‘ืœืื•ืช ืฉืื™ืŸ ืœื”ืŸ ื”ืคื ื™ื•ืช ืืช ืขืฆืžื ืœืืฃ ืื—ื“.

ืฉืœื‘ 4: ื’ืœื” ืฆืจื›ื™ื ืœื ื‘ืจื•ืจื™ื

ื–ื”ื•, ืชื›ื ื ื• ืžืื’ืจ ืžื™ื“ืข ื‘ื• ืชื•ื›ืœื• ืœื›ืชื•ื‘ ื‘ืฆื•ืจื” ืžื•ืฉืœืžืช ื• ืื™ื›ืฉื”ื• ืœืงืจื•ื.

ื‘ื•ืื• ืœืฉื™ื ืืช ืขืฆืžื ื• ื‘ื ืขืœื™ ื”ืžืฉืชืžืฉ ื‘ืฉื™ืจื•ืช ืฉืœื ื• โ€“ ืžื” ืื ื—ื ื• ืจื•ืฆื™ื ืœืขืฉื•ืช ืขื ื–ื”?

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

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

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

ืฉืœื‘ 5: ื“ื ื•ืจืžืœื™ื–ืฆื™ื” ื—ื›ืžื”

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

ื˜ื‘ืœืื•ืช: RU

CREATE TABLE "ะ ะตะตัั‚ั€ะกะพะพะฑั‰ะตะฝะธะน"(
  "ะ’ะปะฐะดะตะปะตั†"
    uuid
, "ะขะธะฟะ ะตะตัั‚ั€ะฐ"
    smallint
, "ะ”ะฐั‚ะฐะ’ั€ะตะผั"
    timestamp
, "ะกะพะพะฑั‰ะตะฝะธะต"
    uuid
, PRIMARY KEY("ะ’ะปะฐะดะตะปะตั†", "ะขะธะฟะ ะตะตัั‚ั€ะฐ", "ะกะพะพะฑั‰ะตะฝะธะต")
);
CREATE INDEX ON "ะ ะตะตัั‚ั€ะกะพะพะฑั‰ะตะฝะธะน"("ะ’ะปะฐะดะตะปะตั†", "ะขะธะฟะ ะตะตัั‚ั€ะฐ", "ะ”ะฐั‚ะฐะ’ั€ะตะผั" DESC);

CREATE TABLE "ะฃั‡ะฐัั‚ะฝะธะบะขะตะผั‹"(
  "ะขะตะผะฐ"
    uuid
, "ะŸะตั€ัะพะฝะฐ"
    uuid
, PRIMARY KEY("ะขะตะผะฐ", "ะŸะตั€ัะพะฝะฐ")
);

ื˜ื‘ืœืื•ืช: EN

CREATE TABLE message_registry(
  owner
    uuid
, registry
    smallint
, dt
    timestamp
, message
    uuid
, PRIMARY KEY(owner, registry, message)
);
CREATE INDEX ON message_registry(owner, registry, dt DESC);

CREATE TABLE theme_participant(
  theme
    uuid
, person
    uuid
, PRIMARY KEY(theme, person)
);

ื›ืืŸ ื™ื™ืฉืžื ื• ืฉืชื™ ื’ื™ืฉื•ืช ื˜ื™ืคื•ืกื™ื•ืช ื”ืžืฉืžืฉื•ืช ื‘ืขืช ื™ืฆื™ืจืช ื˜ื‘ืœืื•ืช ืขื–ืจ:

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

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

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

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