Как ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅

Π’Ρ‹ Π»ΡŽΠ±ΠΈΡ‚Π΅ ΠΈΠ· Ρ€Π°Π·Π° Π² Ρ€Π°Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ? Π’ΠΎΡ‚ ΠΈ я Π½Π΅Ρ‚. Но ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π² SQL-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ РостСлСкома ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ всС Π΄ΠΆΠΎΠΉΠ½Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Ρ€ΡƒΡ‡ΠΊΠ°ΠΌΠΈ. И это ΠΏΡ€ΠΈΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² 90% случаСв поля ΠΈ условия соСдинСния Ρ‚Π°Π±Π»ΠΈΡ† совпадали ΠΎΡ‚ запроса ΠΊ запросу! Казалось Π±Ρ‹, любой SQL-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ автозаполнСния, Π½ΠΎ для Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ ΠΎΠ½ΠΎ Π½Π΅ всСгда Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚: Π² Π½ΠΈΡ… Ρ€Π΅Π΄ΠΊΠΎ заводятся unique constraint ΠΈ foreign key Π² цСлях ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π° Π±Π΅Π· этого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ собой связаны сущности ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π΅Π±Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ.

Как ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅

ΠŸΡ€ΠΎΠΉΠ΄Ρ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅, Π³Π½Π΅Π², Ρ‚ΠΎΡ€Π³, Π΄Π΅ΠΏΡ€Π΅ΡΡΠΈΡŽ ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ°ΡΡΡŒ ΠΊ ΠΏΡ€ΠΈΠ½ΡΡ‚ΠΈΡŽ, я Ρ€Π΅ΡˆΠΈΠ» β€” Π° ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ самому Π½Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ с Π±Π»Π΅ΠΊΠ΄ΠΆΠ΅ΠΊΠΎΠΌ ΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ? Π― ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ dbeaver, написанным Π½Π° java, Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ вСрсия с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ. Π‘ΠΎΠ·Ρ€Π΅Π» Π½Π΅Ρ…ΠΈΡ‚Ρ€Ρ‹ΠΉ ΠΏΠ»Π°Π½:

  1. Найти Π² исходном ΠΊΠΎΠ΄Π΅ классы, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
  2. ΠŸΠ΅Ρ€Π΅ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с внСшними ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‚ΡƒΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΄ΠΆΠΎΠΉΠ½Π°Ρ…
  3. ??????
  4. PROFIT

Π‘ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ достаточно быстро разобрался β€” нашСл Π² Π±Π°Π³Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€Π΅ запрос Π½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΡƒ автозаполнСния ΠΈ Π² связанном ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» класс SQLCompletionAnalyzer. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π» ΠΊΠΎΠ΄ β€” Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ. ДоТдался свободного Π²Π΅Ρ‡Π΅Ρ€Π° ΠΈ Π½Π°Ρ‡Π°Π» ΠΏΡ€ΠΎΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. ΠŸΡ€Π°Π²ΠΈΠ»Π° связСй Ρ‚Π°Π±Π»ΠΈΡ† (ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅) Ρ€Π΅ΡˆΠΈΠ» вСсти Π² json. Π£ мСня Π½Π΅ Π±Ρ‹Π»ΠΎ практичСского ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этим Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ ΠΈ тСкущая Π·Π°Π΄Π°Ρ‡Π° видСлась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ это ΡƒΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с json Ρ€Π΅ΡˆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ json-simple ΠΎΡ‚ Π³ΡƒΠ³Π»Π°. Π’ΡƒΡ‚ Π½Π°Ρ‡Π°Π»ΠΈΡΡŒ ΡΡŽΡ€ΠΏΡ€ΠΈΠ·Ρ‹. Как Π²Ρ‹ΡΡΠ½ΠΈΠ»ΠΎΡΡŒ, dbeaver, ΠΊΠ°ΠΊ Ρ‚Ρ€ΡƒΡŠ-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, написан Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ эклипса с использованиСм OSGi-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°. Для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² эта ΡˆΡ‚ΡƒΠΊΠ° Π΄Π°Π΅Ρ‚ удобство управлСния зависимостями, для мСня ΠΆΠ΅ большС Π±Ρ‹Π»Π° ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Ρ‚Π΅ΠΌΠ½ΡƒΡŽ магию, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я Π±Ρ‹Π» явно Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²: ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΌΠ½Π΅ классов ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ json-simple Π² шапкС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ класса, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽ Π΅Π΅ Π² pom.xml, послС Ρ‡Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ катСгоричСски отказываСтся Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ ΠΈ валится с ошибками.

Π˜ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ошибки сборки Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ: прописал Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π½Π΅ Π² pom.xml, Π° Π² манифСстС manifest.mf, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ OSGI, ΠΏΡ€ΠΈ этом ΡƒΠΊΠ°Π·Π°Π² Π΅Π΅ ΠΊΠ°ΠΊ import-package. НС самоС красивоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π·Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’ΡƒΡ‚ появился ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡΡŽΡ€ΠΏΡ€ΠΈΠ·. Если Ρ‚Ρ‹ вСдСшь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π² intellij idea, нСльзя просто Ρ‚Π°ΠΊ Π²Π·ΡΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Π΅Π±Π°Π³ своСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, основанного Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ eclipse: Π½Π΅ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚Ρ€Π°Π΄Π°Ρ‚ΡŒ Π½Π΅ мСньшС, Ρ‡Π΅ΠΌ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊ Π±Π΅Π· автодополнСния запросов. На ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡˆΠ»ΠΈ сами Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π±ΠΎΠ±Ρ€Π°, ΡƒΠΊΠ°Π·Π°Π²ΡˆΠΈΠ΅ Π² wiki всС Ρ‚Π°Π½Ρ†Ρ‹ с Π±ΡƒΠ±Π½ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π‘Π°ΠΌΠΎΠ΅ ΠΎΠ±ΠΈΠ΄Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ послС всСх этих присСданий ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π» Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π² Π΄Π΅Π±Π°Π³Π΅ с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ Ρ‡Π΅Ρ€Π΅Π· import-package Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ json (ΠΏΡ€ΠΈΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΎΠ½ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ собирался).

К Ρ‚ΠΎΠΌΡƒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ я успСл ΠΏΡ€ΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСудобство использования json для ΠΌΠΎΠ΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ β€” всС-Ρ‚Π°ΠΊΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ΠΈ для этого Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ xml Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚. Π’Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ xml Π±Ρ‹Π»ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² JDK всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… классов, Ρ‡Ρ‚ΠΎ Π΄Π°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π±ΠΎΡ€ΡŒΠ±Ρƒ с внСшнСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ. Π‘ большим ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅ΠΌ пСрСнСс всС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· json Π² xml ΠΈ приступил ΠΊ ΠΏΡ€Π°Π²ΠΊΠ°ΠΌ Π»ΠΎΠ³ΠΈΠΊΠΈ автозаполнСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tableRelations>
    <tableRelation>
        <leftTable>dim_account</leftTable>
        <rightTable>dim_partner</rightTable>
        <joinColumnPair leftColumn="partner_key" rightColumn="partner_key"/>
        <joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
    </tableRelation>
    <tableRelation>
        <leftTable>dim_account</leftTable>
        <rightTable>dim_branch</rightTable>
        <joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
        <joinColumnPair leftColumn="branch_key" rightColumn="branch_key"/>
    </tableRelation>
</tableRelations>

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ я внСс измСнСния Π² классы SQLUtils ΠΈ SQLCompletionAnalyzer. ИдСя такая: Ссли ΠΏΡ€ΠΎΠ³Π΅ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ подходящиС прСдлоТСния автозаполнСния ΠΏΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅, Ρ‚ΠΎ ΠΎΠ½Π° провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π΄ΠΆΠΎΠΉΠ½ΠΎΠ² ΠΏΠΎ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ xml. Π’ самом Ρ„Π°ΠΉΠ»Π΅ хранятся ΠΏΠ°Ρ€Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ† с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ эти Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½ΡƒΠΆΠ½ΠΎ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π½Π° тСхничСскиС Π΄Π°Ρ‚Ρ‹ дСйствия записСй eff_dttm ΠΈ exp_dttm ΠΈ Ρ„Π»Π°Π³ логичСского удалСния deleted_ind ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Когда ΠΏΡ€Π°Π²ΠΊΠΈ Π² ΠΊΠΎΠ΄ Π±Ρ‹Π»ΠΈ внСсСны, появился вопрос β€” ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ? БущностСй Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ, самому всС связи ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½ΠΎ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Ρ€Π΅ΡˆΠΈΠ» ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° своих ΠΊΠΎΠ»Π»Π΅Π³-Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΎΠ². Π€Π°ΠΉΠ» ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π»ΠΎΠΆΠΈΠ» Π² svn, ΠΎΡ‚ΠΊΡƒΠ΄Π° дСлаСтся Ρ‡Π΅ΠΊΠ°ΡƒΡ‚ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ‚Π°ΠΊΠΎΠΉ: Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ появилась новая ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ? Один Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊ вносит Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π΄ΠΆΠΎΠΉΠ½Ρ‹ Π² Ρ„Π°ΠΉΠ», ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ измСнСния, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Ρ‡Π΅ΠΊΠ°ΡƒΡ‚ ΠΊ сСбС ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°ΡŽΡ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ Π°Π²Ρ‚ΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ: ΠΊΠΎΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ, Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ Π·Π½Π°Π½ΠΈΠΉ ΠΈ всС Ρ‚Π°ΠΊΠΎΠ΅. ΠŸΡ€ΠΎΠ²Π΅Π» для ΠΊΠΎΠ»Π»Π΅Π³ Π²ΠΎΡ€ΠΊΡˆΠΎΠΏ ΠΏΠΎ использованию ΠΏΡ€ΠΎΠ³ΠΈ, написал ΡΡ‚Π°Ρ‚ΡŒΡŽ Π² ΠΊΠΎΠ½Ρ„Π»ΡŽΠ΅Π½Ρ β€” Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ инструмСнтом большС.

Π Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ этой Ρ„ΠΈΡ‡Π΅ΠΉ Π΄Π°Π»Π° ΠΌΠ½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ стоит Π±ΠΎΡΡ‚ΡŒΡΡ ΠΊΠΎΠ²Ρ‹Ρ€ΡΡ‚ΡŒ опСнсорсныС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ β€” ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρƒ Π½ΠΈΡ… понятная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΠΈ Π΄Π°ΠΆΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ языка Π±ΡƒΠ΄Π΅Ρ‚ достаточно для экспСримСнтов. А ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»Π΅ упорства Π΄Π°ΠΆΠ΅ получится ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ нСнавистных Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, сэкономив сСбС врСмя Π½Π° Π½ΠΎΠ²Ρ‹Π΅ экспСримСнты.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com