Keycloak and Reverse Proxy: A Guide to Production Setup
Reverse Proxy and Keycloak Configuration When deploying a Keycloak behind a reverse proxy, itβs crucial to understand a relationship between Keycloakβs configuration arguments and an underlying reverse proxy concepts. Based on your security requirements, you must choose between SSL termination and TLS passthrough, and configure a session affinity accordingly in your reverse proxy. There is an article on Keycloak documentation that covers parts of topic, while I had have a lot of questions after reading it. Letβs explore the topic in more detail. ...
ΠΠ²ΡΠΎ-ΠΌΠΎΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΎΡ Mark Seemann
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ΄Π΅Π»ΠΈΡΡ ΡΠ½ΠΈΡ ΡΠ΅ΡΡΡ ΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Dependency Injection? Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ ΡΠ½ΠΈΡ ΡΠ΅ΡΡΠΎΠ² (unit test), Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ Π°Π²ΡΠΎΠΌΠΎΠΊ (Auto-mocking Container). ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΡΡΠΏΠΊΠΈΡ ΡΠ΅ΡΡΠΎΠ² (Fragile Test), ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊ ΡΠ°ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (system under tests - SUT) ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π°Π½ΡΠΈΠΏΠ°ΡΡΠ΅ΡΠ½Π° ΠΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Mark Seemann. ΠΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°: ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π½Π° ΡΡΠΎΡ ΡΠ°Π· ΡΡΠ°ΡΡΠΈ ΠΎΡ Mark Seemann ΠΎ Π°Π²ΡΠΎ-ΠΌΠΎΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ . ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ ΠΌΠ½Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ½ΠΈΡ ΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Auto mock-ΠΎΠ² Ρ ΡΠ·Π½Π°Π» Π½Π΅ ΡΠ°ΠΊ ΠΈ Π΄Π²Π°Π½ΠΎ. Π§ΡΠΎ-Π±Ρ Π·Π΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠΎΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ²ΡΡ Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΎΠ² Π±Π΅Π· Π»ΠΈΡΠ½Π΅ΠΉ Π±ΠΎΠ»ΠΈ. Π ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π» ...
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ ΡΡΠΎΠ²Π½ΠΈ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠ»ΡΠ°Π½ΠΈΠ΅ Π·ΠΎΠ»ΠΎΡΠΎ - ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ²Π»ΡΡΡΠ΅Π΅ΡΡ Π²Π°ΠΆΠ½ΠΎΠΉ ΡΠ°ΡΡΡΡ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΠΈ Unix, ΠΊΠΎΡΠΎΡΠ°Ρ Π³Π»Π°ΡΠΈΡ, Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅Ρ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ ΡΡΠΎ-Π±Ρ ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° ΡΠΊΠ°Π·Π°ΡΡ, ΡΠΎ Π»ΡΡΡΠ΅ Π΅ΠΉ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠ°ΡΠΈΠΈ ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ²ΠΎΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΊΠ°ΠΊ ΡΠ΅Π½Π½ΡΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ²ΠΎΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½Π΅Π΅. Π’ΠΎ Π΅ΡΡΡ, ΠΌΠΎΠ»ΡΠ°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠ±ΡΠΎΠ΄Π΅ΡΠ΅Π»ΡΡ. ΠΠ΅Ρ Π΅Π΄ΠΈΠ½ΠΎΠΉ, ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΠΈ Unix, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π±Ρ: βΠΠΈΡΠΈΡΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ, ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΈ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌΠΈ. ΠΠΈΡΠΈΡΠ΅ ΠΈΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π΄Π΅Π»Π°Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Π΄Π΅Π»Π°Π»ΠΈ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈβ. Π’ΠΎ Π΅ΡΡΡ, ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠ° ΠΏΠΎΠ½ΡΡΠΈΠΉ ΠΌΠ°Π»ΠΎΡΡΠΈ, ΠΏΡΠΎΡΡΠΎΡΡ, ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ, ΠΌΠ°ΡΡΠ΅ΡΡΡΠ²Π°, ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΠΈ, ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ, ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΡ, ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ, Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΈ ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΠΈ. ...
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ sync over async deadlock
ΠΠ°ΠΊ Π²Ρ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΠΈΠ· ΠΏΠΎΡΡΠ° ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠΈΠΏΡ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ Π² Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π½ΡΠΆΠ½ΠΎ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ Π½Π° Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΊΠΎΡΠΎΡΡΠΉ Π²Π»Π°Π΄Π΅Π΅Ρ ΡΡΠΈΠΌ ΡΠ΅ΡΡΡΡΠΎΠΌ. ΠΠ΅ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΊ Π½ΠΈΠΆΠ΅ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅. ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ°. ΠΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ ΠΊΠΎΠ΄ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ, ΠΊΠΎΠ΄ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ΅Ρ Π½ΠΈΠΊΠΎΠΉ sync over async. Π’.Π΅. ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠΆΠ΄ΡΠΌΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° taskName.Wait(). ...
ΠΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Task ΠΈ Thread
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌΠΈ Ρ ui-control ΠΈΠ»ΠΈ asp.net ΡΠ°ΡΡΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΏΠΎΡΠΎΠΊΠ° (thread-local storage TLS). Π ΡΠ»ΠΎΠ²Ρ: ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π°ΡΡΡΠΈΠ±ΡΡΠ° [ThreadStatic] ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠ° ThreadLocal<T>. ΠΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠΌ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° dotnet Π²ΡΠ±ΡΠΎΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ System.InvalidOperationException Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ βThe calling thread cannot access this object because a different thread owns it.β. ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠ΅Π±Π΅ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ win-form ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π°ΠΌ ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ Π΄ΠΎΠ»Π³ΠΎΠΈΠ³ΡΠ°ΡΡΡΡ Π·Π°Π΄Π°ΡΡ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ-Π±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΡΠΎΠΊ ΠΈ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΡ Π·Π°Π΄Π°ΡΡ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ· ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π½Π° UI - Π²Π΅Π΄Ρ ΡΠ΅ΡΡΡΡΡ UI ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ, Π° ΠΎΠ±ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΌΡ ΠΊ Π½Π΅ΠΌΡ Π² Π΄ΡΡΠ³ΠΎΠΌ. ΠΡΠΎ ΠΈ Π΅ΡΡΡ ΡΠ° Π²ΡΡΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΡΠΎΠ»ΠΊΠ½ΡΠΌΡΡ Ρ System.InvalidOperationException. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π°ΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΏΠΎΠ΄ΡΡΠΆΠΈΡΡΡΡ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ. ...
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Π° saga Π½Π° C#
ΠΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°: Π£ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ ΡΠΏΠΎΠ΄Π²ΠΈΠ³Π»ΠΎ ΠΌΠ΅Π½Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡΡΡ ΡΡΠΈΠΌ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠΌ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ javascript Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ redux-saga. ΠΠ½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Π½Π°ΡΠ°Π»ΠΎΡΡ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Π° ΠΎΡ Bernd RΓΌcker ΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎΠΉ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΈ Caitie McCaffrey. ΠΠΎΡΠ»Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΡ Ρ ΡΡΠΈΠΌΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°ΠΌΠΈ Ρ ΠΌΠ΅Π½Ρ Π²ΡΡ Π΅ΡΡ ΠΎΡΡΠ°Π²Π°Π»ΠΈΡΡ Π²ΠΎΠΏΡΠΎΡΡ. ΠΡΠ΅Π½Ρ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ βΠ² ΠΆΠΈΠ²ΡΡβ Π² Π²ΠΈΠ΄Π΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π»ΠΈΠ±ΠΎ PoC-a. ΠΠ°ΡΠ΅ΠΌΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΡΡΠ°ΡΡΡ Clemens Vasters-a, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΡΠΆΠ΅ Π² Π΄Π΅ΡΠ°Π»ΡΡ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. ...
Π Π°Π±ΠΎΡΠ° Ρ Π²Π΅ΡΠΊΠ°ΠΌΠΈ
ΠΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΊΡΡ ΡΠ²Π»Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠΌ. ΠΡΠΈΠ³ΠΈΠ½Π°Π» ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ΠΌ Π²Π΅ΡΠΎΠΊ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π²Π°ΠΌ ΠΎΡΠ»ΠΈΡΠ½ΡΡ HOWTO Control Source Eric Sinkβs. Π― ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π±ΡΠ°Π½ΡΠ΅Π²Π°Π½ΠΈΡ βΡΠ΅Π»ΠΈΠ·Π½Π°Ρ Π²Π΅ΡΠΊΠ°β (ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°: ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ°ΡΠ΅Π»ΠΈ. ΠΠΎ-ΠΌΠΎΠ΅ΠΌΡ, ΡΡΠΎΠΈΡ ΡΠ΄Π΅Π»ΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°ΠΌ git-flow, github-flow ΠΈ gitlab-flow, Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΡΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄ΡΠΌΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ). ΠΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ βΠ Π΅Π»ΠΈΠ·Π½Π°Ρ Π²Π΅ΡΠΊΠ°β Π²ΡΡ Π½ΠΎΠ²Π°Ρ ΡΠ°Π±ΠΎΡΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² trunk Π²Π΅ΡΠΊΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ°Π΅ΡΡΡ ΠΊ ΡΠ΅Π»ΠΈΠ·Ρ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡ Π΅ΠΌΡ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅Π΄ΠΊΠΈΠΌΠΈ ΠΈ ΡΡΠΈΠ·ΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠ°Π²ΠΊΠΈ. Π ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠΎΠ·Π΄Π°Π΅Ρ Π²Π΅ΡΠΊΡ Π΄Π»Ρ ΡΠ΅Π»ΠΈΠ·Π°. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Π² ΡΡΠ°Π½ΠΊΠ΅ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π² ΡΡ Π΅ΠΌΠ΅ ΠΈ Π²ΡΠ΅Π³ΠΎ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π Π²Π΅ΡΠΊΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΊΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠΎΡΠ»Π΅ ΡΠ΅Π»ΠΈΠ·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Ρ Π²Π΅ΡΠΊΠΈ Π² trunk. ...
ΠΡΡΡΠΊΠΈ, Ρ ΡΠ°Π½ΠΈΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈ ΠΏΡΠΎΡΠ΅Π΅
ΠΠ°ΠΌΠ΅ΡΠΊΠ° ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°ΡΠΈΠ½Π°Π»Π°ΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ Π±ΡΠ΅ΠΉΠ½-Π΄Π°ΠΌΠΏ ΠΎΠ±ΡΠ°ΡΠΈΠ»Π°ΡΡ Π² Π΄Π»ΠΈΠ½Π½ΡΡ ΡΠ΅ΡΠΈΡ ΡΡΠ°ΡΠ΅ΠΉ ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ ΠΈ Π²Π°ΡΠΈΠΌ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ. Π ΡΡΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Ρ Ρ ΠΎΡΡ ΡΠ°ΡΠΊΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΠΌΠΎΠΈΡ ΠΌΡΡΠ»Π΅ΠΉ ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π²ΡΡΡΠΊΠΈ, Ρ ΡΠ°Π½ΠΈΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΡΡΠΈΠ³Π³Π΅ΡΡ. ΠΠΎ ΡΠ½Π°ΡΠ°Π»Π°β¦ ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ ΡΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΈΠ³Π³Π΅ΡΡ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π»Π΅Ρ. ΠΡΠΎ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΡΠΈΠ³Π³Π΅ΡΡ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½Ρ, Π½ΠΎ Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠΊΠ»ΠΎΠ½ΡΡΡΡ ΠΎΡ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Jon Galloway ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΡΡΠΈΠ³Π³Π΅ΡΠ°ΠΌΠΈ. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΌΠ½Π΅ ΠΌΡΡΠΎΠ»ΡΡ Π³Π»Π°Π·Π° Ρ ΡΠ°Π½ΠΈΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. Π― ΠΏΡΠΈΡΠ΅Π» ΠΈΠ· WinDNA ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΊΠΎΠ»Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ Ρ ΡΠ°Π½ΠΈΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ. Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡ Ρ ΡΠ°Π½ΠΈΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ API ΡΠ»ΠΎΡ Π΄Π»Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ Ρ ΠΎΡΠΎΡΠΎ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠ»ΠΎΠΉ API Π½Π° ΡΡΠΎΠ²Π½Π΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ Ρ Π·Π½Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΡΡΡΠΈΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ»ΠΎΡ API Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ Π½Π΅ Π½ΡΠΆΠ΄Π°ΡΡΡΡ. Π ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Ρ ΡΠ°Π½ΠΈΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠ½ΠΎΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΠΉ, ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·Ρ. ...
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΎΡΠ½ΠΎΠ²Ρ
Π ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ - ΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΠΏΠΎ-ΠΌΠΎΠ΅ΠΌΡ, Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠ΅Π΄ΠΎΡΡΠ΅ΡΠ΅ΠΆΠ΅Π½ΠΈΡ Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΡ Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ . Π― Π½Π΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π΅Π΄ΠΈΠ½ΡΠΉ ΠΈ ΠΈΡΡΠΈΠ½Π½ΠΎ Π²Π΅ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΠΎΡ ΡΠ΅Π»Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π²ΡΠΊΠ°ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠΌ ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ ΠΏΡΠΈΠ²ΡΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΡΡ Π΅ΠΌΠ°ΠΌΠΈ Π±Π°Π· Π΄Π°Π½Π½ΡΡ , ΡΠΎ Ρ Π½Π΅ Ρ ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΡΠΈΠΏΡΡ ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 6 ΡΠ°ΡΠΎΠ² ΠΈ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ Π·Π°ΠΌΠΎΡΠΎΠ·ΡΡ Π½Π° Π΄ΠΎΠ»Π³ΠΎ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΏΠ°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΠ·Π²ΡΡΠΈΠ» ΡΠΎΡΠΌΠΈΡΡΡΡ ΠΌΠΎΠΉ Ρ ΠΎΠ΄ ΠΌΡΡΠ»Π΅Π½ΠΈΡ ΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΅Ρ ΡΡ Π΅ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΠ°ΠΌ ΡΡΠΎΠΈΡ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ Π² Π²Π°ΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠΌ ΠΏΡΡΡΠΌ. ...
Π‘ΠΊΡΠΈΠΏΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
ΠΠΎΡΠ»Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π·ΠΈΡΠ°, Π²ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , Π±Π°Π·ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ. ΠΠ°ΡΡΡΠΏΠΈΡ Π΄Π΅Π½Ρ ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠΎΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡ Π΅ΠΌΡ. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π ΠΌΠΎΠ΅ΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅, ΡΠΊΡΠΈΠΏΡΡ Π±Π°Π·ΠΈΡΠ° ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠ°Π±Π»ΠΈΡΡ ΠΆΡΡΠ½Π°Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΠ, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠΎΠ΄ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠΌ βΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅β, Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΈΠ½Π΄Π΅ΠΊΡΠ΅, ΠΊΠ»ΡΡΠ΅, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ DDL, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΡΡΠ΅ΠΊ, Ρ ΡΠ°Π½ΠΈΠΌΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ. Π― ΡΠ°Π±ΠΎΡΠ°Ρ Ρ ΡΡΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ, ΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌΠΈ, Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΅. Π― ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ°Ρ Π² ΡΠΊΡΠΈΠΏΡΡ Π±Π°Π·ΠΈΡΠ° Π»ΡΠ±ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΡΠΊΡΠΈΠΏΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ...