Як я скажуписав

Почати хочу з того, що наприкінці минулого року назріла деяка критична маса, яка змусила мене все ж таки сісти і запустити процес випуску нової версії моєї скада-системи. Досвід та напрацювання, накопичені за цей час, стали основою для нової концепції продукту, але за умови збереження його архітектурної цілісності та ідеології. Тож зараз готується до випуску нова версія моєї скади під номером 2.0!

Вона була досить серйозно перероблена, хоча, я навіть віддав би перевагу просте поняття — написана заново. Так, були ідеї, були прототипи, була готова архітектура і продукт, що довела себе в бойових випробуваннях і реальних застосуваннях. На основі всього цього, а також моїх нових шалених ідей зараз пишеться абсолютно нова система, але з урахуванням всього вищепереліченого.

Найголовніше, що серйозно мене гальмувало від виходу на шлях розробки нової версії — це та помилка, яку припускаються багато розробників подібних систем, коли доходить до стадії розвитку та розробки нових версій — наступність цих версій. Це дуже серйозний камінь спотикання, який на будь-якій гладкій дорозі дає серйозну перешкоду, про яку запинається чи не кожен, хто по ній йде. Дуже складно зробити нове, яке не заперечуватиме або не підтримуватиме старе, найчастіше тому що це реально нове і старе вже не може бути втиснуте в рамки цієї нової концепції. Адже більшість користувачів - це не старе і нове, а це безперервна лінія, яка тягнеться від старого до нового і не може просто так взяти і перерватися, тому що розробник продукту вирішив, що нове так і все старе треба переробити, або відмовитися від нього. Ця проблема мене гальмувала досить серйозно. Але, я трохи помозкував її тавирішив спробувати один цікавий шлях, який, на мою думку, зможе мінімізувати проблеми при переході на нову систему. І навіть більше — нова система зможе інтегруватися в старі версії проектів і поступово, крок за кроком, дасть розробнику можливість виконати плавний перехід на нову версію вже існуючих і діючих систем. Але подробиці цієї ідеї трохи далі за текстом.

Єдине середовище розробки за допомогою MDI.

Новий графічний двигун

Найголовніша деталь системи, яка була переписана з нуля. І навіть не просто переписана - я створив, по суті, абсолютно новий графічний двигун системи на базі нових для мене технологій. При цьому я спробував закласти в нього ідеї, які стануть основою для того, щоб реально розділити інженерну та дизайнерську працю на два окремі напрямки, але націлених на єдиний результат при розробці інтерфейсів користувача.

Я, як інженер практик, вважаю вже давно, що творча складова не підлягає навчанню та тренуванню, талант він не народжується в ході завзятих копітких розробок. Так може народжуватися і вдосконалюватись майстерність, не більше. Хоч колупайте мене вилкою, але ніхто ніколи не переконає мене, що талант можна прищепити та покращити. Не вірю я в грамотного інженера, який намалює гарний і головне зручний інтерфейс! Насправді мені таке не зустрічалося. Вигадати ідею його зручності — так! Намалювати — НІ! Категорично! Це талант! А він штука рідкісна в поєднанні з інженерною думкою. Тому завжди прагнув до того, щоб праця з розробки графічних інтерфейсів завжди була розділена на два напрямки: дизайн, реалізація. Як то кажуть: Кесарю - кесарево, а слюсарю - ... І тільки так можна зробити це зручним, красивим і функціональним. І обидві ціскладові повинні робити два різних за фахом людини: дизайнер (дизайн) та інженер (реалізація). У новій системі графіки я вирішив максимально спростити підтримку переходів від макета дизайну до його реалізації та назад, зробити його наскрізним. Тобто те, що робить ескізами інженер, може бути передано як є (у векторі, а не малюнками) дизайнеру, а потім від дизайнера повернути як є (у векторі, а не малюнками) назад у скаду, і продовжити редагувати графіку засобами скади далі, не ламаючи того, що зробив дизайнер. На сьогоднішній день, скрізь, де доходить справа до подібних методів розробки інтерфейсу - обмін з дизайнером і назад ведеться лише на рівні графічних картинок, які використовуються максимум як підкладка, або як тло, не більше. Хочу, щоб інженери перестали бути художниками, і робили свої завдання, а художники могли найбільш адекватно приймати та повертати макети інженерам. Це одна з цілей майбутньої системи.

І друге головне завдання графіки у новій системі – знизити процесорне навантаження. У поточній 1-й версії моєї скади вся графіка процесора-залежна, тому у великих рішеннях це починало виявлятися. Також це впливало на інтерактивні можливості графічного інтерфейсу, обмежуючи деякі можливості взаємодії з користувачем.

Сумісність із попередньою версією.

Як уже сказав вище, одна з найчастіших проблем більшості розробників скаду — це підтримка успадкування напрацювань при переході на нові версії. Всі заявляють, що успадкування є і можна перенести все старе в нове, але, як показує практика — перелік «нюансів» та «обмежень» часто зводить нанівець такі заяви, і навіть те, що начебто є, може бути використане не більше ніж для "погратися". Не стверджую, що це поголовний трабл, але— він часто має місце і дуже часто.

Для себе вирішив, що змусити зробити цю справу більш-менш грамотно дозволить лише одне — заборонити на час розробки завантажувати та зберігати системі проекти у її рідному новому форматі, а робити завантаження проектів лише у форматі попередньої версії. Навіть щоб налагодити якусь функцію — треба спочатку створити проект із нею у версії 1.0 і лише потім відкривати його у версії 2.0 та виконувати перевірку. А якщо функція зовсім нова — для перевірки створювати простий проект з нуля.

Принаймні це обмеження змушує опрацьовувати саме підтримку старих напрацювань з перетворенням їх у нові формати і поки що начебто виходить.

До кінця цього місяця планую роздати попередню версію для випробування серед користувачів системи та отримати зворотний зв'язок. Але буде це зроблено лише серед тих, хто зараз реально працює з поточною першою версією системи.

На додаток до сумісності було прийнято рішення, що на рівні мережевого протоколу нова версія повністю відповідатиме специфікації 1-ї версії. Це дасть можливість, маючи готове напрацювання в 1-й версії, відкрити її в новій версії 2.0 і конвертувати, наприклад вузли АРМів, або додати нові з новою графікою і запустити їх вже в рамках системи, що реально працює. Завдяки підтримці однієї і тієї ж специфікації — ця процедура має надати плавний перехід на нову версію системи без ламання всього, що є, і глобального перелопачування та переробки підряд. Подивимося, чи виправдає себе мій задум. Практика покаже, а також зворотний зв'язок від розробників та користувачів теж.

А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»