Fractal Platform: програмування, якого більше немає
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Одного разу, в одному з постів, я сказав, що прилетів сюди з 2050 року.
Мушу зізнатися, я вам казав неправду. Але цього разу я хоча б захопив із собою флешку. ©
Привіт, мене звати Вячеслав. Останні 20+ років я працюю в комерційних проєктах на різних посадах. У цій статті йтиметься про R&D проєкт, який я заснував і яким із захопленням займаюся останні 5 років. Стаття буде цікава як тим розробникам, що досить довго займаються програмуванням і нарешті хочуть знайти щось нове (нові ідеї, думки в практичному виконанні), так і новачкам в IT, які хочуть вивчити технології, що дають змогу швидко створити свій IT-продукт.
Я розповідатиму про платформу, яка повністю змінює розуміння того, з якою швидкістю та гнучкістю можна писати програми. Формально це low-code платформа, але вона відрізняється від аналогів приблизно як 3D принтер від конструктора Lego.
Якщо коротко резюмувати, Fractal справді дозволяє:
- Писати у
10-100 разів менше коду, порівняно із традиційними засобами розробки. Код виходить простим і функціональним, а основні технології, які потрібно знати, зводяться до Json і DQL (аналог LINQ). Близько 70 % системи може конфігуруватися в runtime. - Код виходить гнучким: можливе максимальне перевикористання коду з проєктів, що існують. Вам не складно додати функціональність, яка здавалося б повинна була закладатися в самому фундаменті програми. Fractal це ідеальний інструмент для проєктів, у яких дуже активно змінюються вимоги.
- Незважаючи на те, що Fractal належить до low-code систем, він уже спочатку сприяє тому, щоб будувати «дорослу» архітектуру, яка добре піддається масштабуванню та тюнінгу швидкодії.
Про все це ми поговоримо докладніше, розібравши на практичних прикладах.
Прості речі повинні робитися просто, а складні — трохи складніше. ©
Твій ідеальний день
Я хочу розповісти про ідеальний день Fractal Developer.
Ви прокидаєтеся о
До
До
До
До
Наступний день можна використати створення унікального дизайну програми. На Fractal Platform ми називаємо це makeup, або макіяж програми. Чому макіяж? Оскільки програма вже має стандартний інтерфейс, побудований на основі вашої моделі даних. Ви отримали це абсолютно безкоштовно, не докладаючи жодних зусиль. Тому у вас є вибір: залишити все як є, кастомізувати стандартний інтерфейс (у вашому розпорядженні є десятки контролів та компонентів) або побудувати свій унікальний дизайн програми поверх стандартного. Зазвичай для «лицьових» сторінок програми, які завжди на увазі в користувачів, ми вибираємо makeup, для другорядних сторінок, на кшталт реєстрації користувача, адміністрування, моніторингу, звітної системи — ми вибираємо стандартний інтерфейс.
Функціональна виразність, інкрустована в багатовимірний простір ©
Храм досконалого коду
Я займаюся програмуванням уже більше 20 років, і знаєте що? Мене давно не приваблює маркетинговий лонгрід у статтях. Дайте оцінити мені код! Найцікавіше те, як технологія виглядає з практичної точки зору. Наскільки код виразний, наскільки він функціональний, мінімальний, простий у розумінні. А код на Fractal дає справжнє естетичне задоволення, і я хочу провести вас галереєю, де зібрано більше 20 додатків на Fractal, щоб ви переконалися в цьому самі.
Hello World ми пропустимо, традиційно це однорядковий застосунок.
Почнемо з програми ToDo list. Усе, що нам потрібно, це json, який моделює структуру бази даних і один лаконічний функціональний вираз:
Це все. Увесь код програми. Усе просто та зрозуміло. Хороший код читається з першого разу та не вимагає зайвих коментарів. Ось так виглядає готовий розгорнутий застосунок.
Спробуємо ускладнити завдання та написати ToDo With Categories.
Припустимо, що в нас є дві локації для наших справ: Work та Home, і ми хочемо розділити свої завдання за цими категоріями.
Усе, що для цього потрібно, це змінити Json додавши в його структуру Categories.
Хвилина справи, С# код не змінився. Напевно, ви будете здивовані, адже у традиційних мовах програмування, де ми використовуємо реляційні СУБД, DI, Rest, ORM та інше, нам знадобилася б як мінімум ще одна розв’язка в таблиці, зміна репозиторіїв, сервісів, endpoints, тестування зрештою. Але Fractal орієнтований на спрощення програмування максимально, наскільки тільки можливо. І це працює.
Ми тільки починаємо свій шлях, попереду складніші проєкти: VideoLibrary сайт, що моделює онлайн-кінотеатр із пейджингом, прев’ю відео, пошуком відео за ключовими словами і написаний він у... 32 рядки коду. Щоправда, він запаролений, просто тому, що він призначений для особистого користування.
Схожий на нього PhotoAlbum — сайт для анонімного завантаження фото, написаний майже в 40 рядків коду. Сайт для перевірки котувань BTC, що взаємодіє з REST сервісом, у 26 рядків коду. До речі, це чудовий приклад, який показує, що скрізь, де в нас є Json, ми можемо побудувати стандартну форму й отримати весь CRUD безкоштовно. Напевно, ця фіча звучить не дуже масштабно, але скрізь, де в контексті є json (а ми пам’ятаємо, що json можна отримати де і як завгодно, наприклад серіалізувавши об’єкт або викликавши rest-сервіс), ми можемо побудувати UI-форму, просто викликавши OpenForm(). Ця функціональність відкриває просто епічний портал у створенні будь-яких динамічних форм, найхитріших конфігурацій, просто в кілька рядків коду.
А ось уже проєкти серйозніші:
- SocialNetwork — соцмережа з реєстрацією, стрічками новин, друзями, лайками та коментарями в калібрі 220 рядків коду.
- FreelanceResponse — фріланс біржа, що містить досить складні flow-взаємодії тендерного типу між замовниками та виконавцями. На борту реєстрація, поділ ролей між користувачами, створення завдань, відкриття секретних чатів, завантаження виконаних демо тощо. Загалом близько 10 сценаріїв. Уся бізнес логіка виписана у 440 рядків коду. На створення такого сайту можна резервувати
2-3 доби для одного девелопера. - DatingGame — сайт, який моделює стару добру розраховану на багато користувачів онлайн-гру «Любов з першого погляду», з кількома раундами матчингу пар, написаний приблизно в 500 рядків коду.
- RawForum — клон звичайнісінького форуму, створений у калібрі 308 рядків коду + структура моделі даних + три скопійованих layouts із сайту донора. Що цікаво, він уже не виглядає як набір стандартних форм, а пройшов makeup, щоб виглядати як звичайнісінький форум:
- У функціональності для користувача: реєстрація, логін, створення топіків, створення повідомлень, перегляд того, хто і коли зареєстрований, цитування повідомлень.
- У функціональності для адміністратора: редагування категорій / топіків / користувачів.
Можна переглянути інші приклади застосунків. Увесь код програм зібраний у чотирьох папках:
Applications — C# код програми.
Databases — база даних програми, яка зазвичай складається з кількох документоорієнтованих колекцій із json-документами.
Layouts — якщо програма перевизначає стандартний UI, можна задати свою html-верстку.
Files — файли, які повинні бути розгорнуті разом із додатком.
Як бачимо, код у всіх додатках простий, зрозумілий, функціональний і, головне, короткий. Він практично не змушує писати найрізноманітніші додатки в найкоротші терміни.
Нижче у розділі Fractal Academy є відеокурс Many Examples, де демонструється робота кожного з 20+ застосунків та розбирається код кожного з них.
11 вимірів з теорії Струн ? Мало ©
Common Multi-Dimensional Design (CMDD)
Щоразу, коли нас знайомлять з новою Low Code / No Code платформою, нам показують панелі з великою кількістю інструментів. Не важливо, чи це Bubble, WordPress, Saleforce, WebFlow, Tilda, 1С та інші — можливості системи вимірюють кількістю готових модулів та інтеграцій. Fractal йде іншим шляхом: він не моделює конструктор Lego з величезною кількістю готових кубиків. Тут ви не побачите панелі інструментів, що нагадують пульт управління космічним кораблем, що потребує тривалого вивчення та розуміння всіх нюансів.
Fractal — це єдиний дизайн, єдиний ескіз, єдиний мат. апарат, який виводить можливості побудови програм на новий рівень.
Основна ідея полягає в поділі бізнес-логіки на Аспектну та Сценарну її частини. Аспектна бізнес-логіка може застосовуватися до будь-якої частини доменної моделі даних у фоновому режимі. Сценарна логіка — це вже конкретні дії з доменною моделлю.
Найпростіше це розглянути на прикладі банківського ПЗ. З погляду користувача, банківське програмне забезпечення виглядає дуже просто. Очевидно, десь є регістр пам’яті, у якому зберігається баланс рахунку. Усі операції зводяться до двох: поповнення цього балансу (інкремент) чи списання із цього балансу (декремент). Це називається Сценарій. Але з погляду реального банківського ПЗ усе виглядає зовсім непросто, адже є багато Аспектної логіки. Є поділ прав користувачів, є авторизація, аунтифікація, шифрування і валідація даних, транзакційність, нарахування відсотків, синхронізація даних та багато іншого. У Fractal ми це все називаємо Dimensions або інші виміри, у яких ми описуємо аспектну бізнес-логіку навколо Document, у якому зберігається наш баланс.
Коли ми починаємо розплутувати клубок бізнес-логіки в нашому майбутньому застосунку, наша мета максимально викристалізувати Сценарій (той самий інкремент і декремент балансу або, скажімо, збереження сутності User), а решту винести в Аспектні (Dimensions) прошарки. Для чого ми це робимо — розглянемо трохи пізніше, а поки що насолодимося фрактальною структурою. Fractal — це щось фундаментальне, що оточує нас у кожній квітці, у кожному листку рослини. Це те, що вбудоване в нас на інтуїтивному рівні.
Донедавна мене цікавило питання: що ж є первинним — Сценарій чи Аспект?
Здавалося, що до аспектів увійдуть лише кілька очевидних Dimensions, на кшталт логування, права доступу, валідація. Те, що зазвичай «розтікається» по бізнес-логіці нашого проєкту тонким рівномірним шаром і зачіпає майже всі частини системи. Але виявилося, що Аспектність є первинною, фундаментальною, а Сценарій — це просто підмножина цієї Аспектності, яку ми виділяємо тільки для того, щоб взаємодіяти з недетерменованістю зовнішнього світу. У Fractal все: від транзакційності та зберігання даних до відображення контролю — так чи інакше зав’язано на Dimensions. Це єдиний ескіз, єдиний дизайн, розуміння роботи якого дає вам розуміння роботи 80 % Fractal.
Ось неповний перелік того, що можна винести в аспекти:
Тепер розберемося, чому для нас важливо якнайбільше бізнес-логіки винести в Dimensions, залишивши кришталево чистим сценарій.
- Поділ на Dimensions дає приголомшливе читання коду. Усе-таки людський мозок — це однопотокова штука. У Fractal, якщо ми читаємо конфігурацію Security, ми читаємо конфігурацію Security. Якщо ми читаємо конфігурацію Validation, ми то це справді конфігурація Validation. Жодного змішання, що є не природним для нашого мозку. Для будь-якого конфігу єдиний формат — Json. Знаючи синтаксис Json, ви знаєте синтаксис усіх 57 Dimensions у Fractal. Порівняйте це з тим, як влаштований XML або Html, де в одному файлі ми можемо намішати стилі, скрипти, атрибути, теги і контент. За будь-якого розміру проєкту Fractal, за будь-якої кількості Dimensions у колекціях, читабельність бази даних і зрозумілість коду завжди на дуже високому рівні.
- Dimension — це в більшості випадків та частина програми, яка може конфігуруватися / виправлятися навіть без перезавантаження застосунку. З практики: у середньому 70 % кожного додатку на Fractal конфігурується.
- Dimensions дозволяє будувати ефективний pipeline, що швидко працює. У кожному конкретному місці системи в нас задіяна тільки та бізнес-логіка, яка нам необхідна. Жодного зайвого overhead за функціональністю. Наприклад, якщо в конкретній колекції бази даних нам не потрібна транзакційність, то там немає Transaction Dimension і там не виконується неєдина процесорна інструкція, що хоч якось пов’язана з транзакційністю.
- Dimension — це завжди цілий пласт бізнес-логіки, який може бути доданий або видалений без зміни С# коду програми. Ось типова колекція, яка містить конфігурацію для 7 dimensions. На цьому малюнку ми бачимо принципову різницю між модульним та аспектним підходом.
У модульному підході маємо набір «чорних ящиків» із строго визначеними контрактами комунікацій між ними. Сама суть iнкапсуляції та поліморфізму полягає в тому, що ви можете перевизначити тільки ту частину логіки «чорної скриньки», яка вже передбачена розробником. Якщо намагатися додати такий пласт логіки, який стосується всіх вже написаних модулів, то неминуче потрібно прочитати, модифікувати та перетестувати код. В аспектному підході кожен доменний об’єкт складається з великої кількості прошарків, кожен із яких перебуває в окремому Dimension, в окремому вимірі. У Fractal завжди можна додати такий Dimension, який фундаментально змінює якість всієї системи. Наприклад, ви могли будувати свою систему, нічого не знаючи про Security, Pagination, Encryption, Sort, Filter, Localization, і раптом, просто налаштувавши відповідний Dimension, ця функціональність з’явилася на сторінках програми.
Якщо ви досі думали, що хоч щось знаєте про гнучкість побудови додатків, подивіться на те, як це робить Fractal! Я написав уже більше 20 застосунків на Fractal і (якщо не брати до уваги перший Hello World) це завжди історія про те, що треба взяти вже щось готове, трохи модифікувати, підредагувати колекції — і все працює. Програми неймовірно просто розбираються і збираються по частинам. Ви абсолютно не думаєте про те, щоб все передбачити в архітектурі, про всякі DI, Services, Repositories, REST та багато іншого. Просто накидуєте колекцій з документами, створюєте навколо них аспектну логіку за допомогою Dimensions, думаєте про потоки даних між колекціями та виписуєте у функціональному стилі сценарії відкриття вебформ. Навіть якщо ви ось зовсім не вгадали з архітектурою програми, ви однаково написали в десятки разів менше коду і цей код легко може бути переписаний з нуля. Але, повторюся, перебудувавши своє мислення, згодом у тебе стираються кордони, ти більше не бачиш великої різниці в створенні соціальної мережі, фриланс-біржі, онлайн-гри та інших проєктів.
Іноді буває така ситуація, що в одному застосунку ви побачили одну цікаву функціональність, наприклад, security. В іншому додатку помітили, що програма локалізована 10 мовами, а в третьому застосунку побачили систему блогів і коментарів. І ви просто копіюєте файли у свій новий застосунок із цих трьох джерел, і все це стає єдиним цілим: у всіх частинах тепер є і localization, і security. На Fractal завжди можна підібрати відповідний застосунок «донор» і скопіювати звідти майже весь потрібний функціонал.
Гнучкість розробки на Fractal закладена не в скінченній кількості вже готових модулів, а в тому, що простіше цей код написати самому з нуля або скопіювати його вже з готової програми, мінімально модифікувавши код під себе.
Ну і нарешті, стиль, у якому ми пишемо на Fractal, це цілий новий напрям: ФАП — функціонально-аспектне програмування.
Standard User Interface
Звичайно, міць Fractal у тому, що потрібно знати мало технологій, щоб збирати складні речі. Як ми вже говорили, вхідний поріг для побудови інтерфейсу UI, це просто створення json-документа, який описує доменну модель застосунку.
Ви написали Json:
Ви отримали вебформу з CRUD, що згенерована автоматично.
Тут відкривається вкладена форма:
Цей підхід у побудові вебформ працює значно швидше, ніж це робиться в no-code-рішеннях. Адже в no-code як мінімум потрібно перетягувати контроли з панелі інструментів на форму, дизайн grids, дизайн вкладених форм, вирівнювати їх, розміщувати контроли в GroupBox. Зв’язувати між собою сутність. А тут ваш вхідний квиток — це просто Json, який є одночасно й одиницею зберігання інформації в базі даних, і шаблоном для створення вебформи. Але, найцінніше в цьому підході — це те, що json-документи можна формувати динамічно, а значить динамічно створювати вебформи і динамічно створювати весь CRUD для цих вебформ будь-якої складності та вкладеності.
Це лише перший щабель у побудові інтерфейсів. На другому ступені, мабуть, нам захочеться кастомізувати наш стандартний інтерфейс, і тут на допомогу приходять dimensions зі світу аспектного програмування. Найголовніший dimension — це UI, який дозволяє нам перевизначити базові властивості контролів на формі, але головне — перевизначити сам тип контролу. У нашому розпорядженні, на цей момент, 21 стандартний контрол і 10 стандартних компонентів, що дозволяє відображати на формі різні картинки, відео, графіки, карти та багато іншого. Усі вони працюють за одним правилом: контроли будуються на основі одного атрибуту в json-документі, компоненти будуються на основі секції в json-документі. Інші dimensions, які дозволяють нам будувати UI-інтерфейси, це: Validation, Menu, Enum, Pagination, Wizard, Filter та інші. Усе разом це призводить до можливості будувати досить складні кастомні інтерфейси, лише підредагувавши кілька jsons. А може, навіть просто скопіювавши їх з інших проєктів, тому що ФАП — чудове в перевикористанні коду. Воно прекрасне тим, що досить складну бізнес-логіку ми можемо зібрати просто з кількох dimensions.
На окрему увагу заслуговують ще два dimensions, це — Theme і Localization.
Theme дозволяє нам змінити стандартну «чорну» палітру інтерфейсу користувача на White, LightBlue, LightGreen, LightPink. Або навіть дати можливість користувачеві в UI вибрати кольорову тему.
Localization дозволяє локалізувати всі форми кількома мовами. Причому це відбувається досить просто, у два етапи. На першому етапі при додаванні нової мови система автоматично додає всі неперекладені лейби в json, на другому етапі ви просто в цьому json перекладаєте лейби на потрібну мову.
Ви могли будувати свою програму не думаючи про те, що вона повинна бути локалізована кількома мовами. Могли не витрачати на це часу і не закладати це в архітектуру. Але в якийсь момент, просто додавши Localization dimension, ви легко локалізуєте всі свої стандартні форми на нові мови без зміни вже написаного коду. Це — філософія Fractal.
Ми розглянули другий щабель, який нам коштував трохи дорожче, ніж просто взяти за основу доменну модель, описану в json-документі. На третьому ступені кастомізації, Fractal дозволяє перевизначати HTML-розмітку того, як ми малюємо стандартні контроли. Fractal також дозволяє створювати свої кастомні компоненти, які можна перевикористовувати у вебформах.
Хороші художники копіюють, геніальні художники — крадуть © Пабло Пікассо
RAW User Interface
Fractal дає чудову тріаду в побудові UI-інтерфейсів. Дозволяє підходити до завдання побудови інтерфейсів у прогресивному стилі. На першому етапі, якщо ви зовсім не хочете витрачати час на цю побудову, Fractal намалює інтерфейс для ваших цілей в автоматичному режимі, без докладання зусиль. На другому етапі, якщо ви хочете трохи кастомізувати інтерфейс, додавши, наприклад, пейджинг, валідацію, контекстне меню, або вибрати щось зі стандартної бібліотеки контролів — можна просто налаштувати відповідні Dimensions. І нарешті, на третьому етапі Fractal знімає всі обмеження для побудови інтерфейсів та дозволяє перевизначити логіку відтворення наших контролів. Дозволяє створити свій кастомний Layout та розмістити на ньому свої кастомні контроли та компоненти.
Але чим ближче розробники на Fractal Platform підходили до третього етапу глибокої кастомізації інтерфейсів, тим складніше їм це давалося. Програмування деградувало до генерації html-розмітки в коді С#, що за складністю наближалося до роботи аналогічних дій у таких мовах, як PHP, Ruby, ASP.NET та інших. Звичайно, це суперечило філософії Fractal, де розробка мала бути в десятки разів простішою і швидшою.
Очевидним рішенням, які використовують low-code / no-code платформи, була побудова нового дизайнера вебформ. Але це рішення від початку було невдалим.
По-перше, на ринку вже існують десятки дизайнерів форм та конструкторів сайтів.
По-друге, кожен із цих конструкторів має свої обмеження. Часто досвідчений розробник може визначити, який сайт на якому конструкторі був створений.
А саме від цього ми намагаємося піти, коли уникаємо стандартних інтерфейсів; ми хочемо універсальний інструмент, що нас не обмежує.
По-третє, написати хороший дизайнер форм — це дуже непросте завдання.
Рішення прийшло несподівано. Ідея була в тому, аби не робити ще один повноцінний дизайнер форм, а зробити такий дизайнер форм, який зможе просто готову веброзмітку натягнути на стандартний інтерфейс. Так це буде просто макіяж (makeup) програми, після якого вебсайт не відрізнятиметься від кращих дизайнерських вебрішень, які трапляються в інтернеті.
Такий підхід має низку істотних переваг.
Перше: ви більше не обмежені дизайнером вебформ, можна використовувати будь-який дизайнер у будь-якому конструкторі, а потім просто скопіювати html-розмітку до себе.
Друге — це ідеальний інструмент для клонування сайтів. У вас уже є потужний інструмент для створення бізнес-логіки, все що тепер потрібно — просто провести «face lifting» сторінок вебдодатку, які повинні виглядати не в стандартному інтерфейсі.
Ось як виглядає дизайнер вебформ Create Layout
Інтерфейс вкрай простий, як і сама рання версія, який далі доопрацьовуватиметься. Але головне, він уже виконує свою роль хірургічного столу, де ми можемо взяти розмітку будь-якого сайту, розібрати і модифікувати його дизайн і зробити bind стандартних контролів. Наприклад, на створення одного layout у мене йшло всього приблизно
Все це називається raw-інтерфейс тобто інтерфейс, який ми можемо застосувати для свого сайту на Fractal в майже необробленому вигляді.
Але, звичайно, розглядаючи тріаду для створення стандартних інтерфейсів і тепер познайомившись із raw-інтерфейсами, вся палітра створення інтерфейсів усе ще не виглядає ідеальною. Ідеальною її робить те, як усі ці методи побудови інтерфейсів поєднуються між собою. Тому що кожен вебсайт, незалежно від того, наскільки він складний, можна поділити на зовнішні та внутрішні сторінки. Візьмемо за приклад такий популярний і складний сайт як Rozetka. Він має безліч зручних та відомих екранів для користувача, але ще більше екранів приховано за фасадом. Адміністрація товарів, управління правами користувачів, управління складом, обробка замовлень, реєстрація нових продавців, звітна підсистема, внутрішня документація, листування та багато іншого. Потужність Fractal у тому, що ви можете поділити всі ці UI-сторінки на дві великі групи — для зовнішнього та внутрішнього використання. І так лише на 30 % вебсторінок треба витратити час і зробити в raw-інтерфейсі, а 70 % вебсторінок, які перебувають за фасадом програми, залишити в стандартному інтерфейсі. Це суттєво прискорює розробку front-частини програми. На «нудні» скріни, які є за фасадом вашої програми, можна не витрачати багато часу і мінімально їх кастомізувати. А на дизайн «лицьових» сторінок, які безпосередньо впливають на враження тисяч ваших користувачів, можна витратити більше часу.
Шлях без шляху © Самадхі
Database
Будь-яка система будується на фундаменті. І варто сказати, що Fractal отримав дуже ґрунтовний фундамент. Спочатку ця історія починалася з побудови бази даних і гармонійно виросла в цілу вертикаль самодостатньої екосистеми.
Перш ніж почати, поставимо собі питання. Яка найшвидша база даних у світі? На це наївне питання насправді є цілком конкретна обґрунтована відповідь. Найшвидша база даних у світі — це чисті структури даних. Тому що будь-яка інша база даних — це завжди чисті структури даних + overhead, який привносить обв’язування самої бази даних. Дива не відбувається, швидкість бази даних — це в кінцевому підсумку кількість процесорних команд, які нам необхідно виконати на читання, запис або пошук, а також те, як вони лягають на конвеєр апаратури.
Хороший приклад — Click House, який, як відомо, не гальмує. Він починався з двох консолей, одна з яких пише файли на диск у безперервному режимі, а друга мержить готові файли злиттям. Що може бути простіше за це? Будь-яка інша база даних, яка хоч якось ускладнює цей процес, програє як мінімум у швидкості запису даних.
У Fractal замість бази даних вводиться таке поняття як Storage. Storage — це мінімальна алгоритмічна одиниця для зберігання даних типу key-value, найближча аналогія у світі СУБД — це Engine. Мінімальний, але цілком функціональний Storage можна написати всього в
Цей підхід дозволяє суттєво спростити архітектуру програми та зменшити комунікаційні витрати між різними потоками даних.
Іншою перевагою Storage є те, що їхня гранулярність не закінчується на одній колекції або таблиці в базі даних. Storage гранулярний аж до атрибуту документа.
Це дає справді приголомшливу гнучкість зберігання даних, навіть у межах одного документа. Важливе зауваження: велика кількість Storages не означає, що вам потрібно із цим усім розбиратися. Також, як і в звичайних СУБД, у 95 % випадків ви абсолютно не замислюватиметеся, як зберігаються ваші дані. Ви використовуватимете універсальний збалансований Storage за замовчуванням, який буде працювати досить добре. Але в тих 5 % випадків, коли обсяги та навантаження даних вимагатимуть спеціалізованих рішень, у вас буде просто величезний арсенал можливостей вирішити це просто і зрозуміло в рамках архітектури, що існує.
Не дивуйтеся, якщо вам покажуть синтетичний тест, де Storage триматиме навантаження, скажімо, у
Завжди йди найкоротшим шляхом. Найкоротший шлях згідний з природою © Марк Аврелій
Pefrormance
Якщо на чистоту, то яка різниця, на яких технологіях ви напишете свою програму? Нехай займе це на звичному стеку розробки у вас два тижні замість двох днів на Fractal. Світ не зміниться за два тижні. Код читається на Fractal простіше? Знаєте, синтаксис — це суб’єктивна думка; можливо, людині, яка працювала 10 років на Perl, його код буде ближчий і зрозуміліший. На Fractal виходить більш гнучкий для модифікації код? Та я вже добре знаю всі технічні вимоги для свого застосунку, і його точно не чекає якийсь істотний pivot.
Але є одне, що точно відрізняє добротну річ від неякісної. І це, звичайно, швидкість роботи або те, що безпосередньо бачить користувач. Навіть якась мінімальна неприємна затримка в інтерфейсі може відрізняти дешевий китайський телефон від брендових телефонів, що коштують в десятки разів дорожче. Швидкість — це бренд. Якщо людина звикла до швидкого та реагуючого інтерфейсу, повернутися до інтерфейсу, який усипаний якимись прогрес-барами і незрозумілими затримками, буде як мінімум неприємно. Сьогодні я радий повідомити, що на Fractal, ні на одному з 23 додатків, немає жодного прогресу-бару. Так, в основному ми маємо справу з тестовими програмами. У них досить багато функціональності, але немає суттєвого навантаження та великих обсягів даних. Оптимізація — це та історія, яка тільки починається. Це як гоночний болід, який вже викотили на трек, але в ньому все ще багато проблем та простору для інженерних рішень.
Але є один проєкт, який я вважаю доволі «дорослим». Це портал Fractal Platform. На сьогодні він моделює функціональність Jira, Slack, має свій блог. У нього інтегровані засоби для деплою та моніторингу програм Fractal Cloud, а також безліч звітів, портал для навчання та проходження іспитів студентами. Усе це навантажує складну систему прав на 12 розділів. Весь UI перекладено 7 мовами. Загальна доменна модель, за оцінками, перевищує
Із якою швидкістю має працювати такий застосунок? На це питання складно відповісти, але сьогодні це близько 100 мс на завантаження будь-якої сторінки. А на розігрітому кеші час падає до
Хоча це і швидше за 95 % сайтів в інтернеті, виглядає не дуже переконливо. Однак, тут необхідно враховувати, що сервер саме в цьому вимірі, це
Звичайно, я впевнений, що доу-ефект виправить цю ситуацію і виявить безліч багів, зокрема з performance. Але я також вірю, що Fractal уже перейшов ту межу, коли димлячий автомобіль, що періодично ламається на спицевих колесах, уже точно краще ніж будь-який кінь у стайні.
Не бійтеся досконалості, Вам її ніколи не досягти © Сальвадор Далі
Auto & Load Testing
Звичайно, коли ми знайомимося з Fractal, ми помічаємо, наскільки просто тепер розробляти програми. Наскільки гнучкими та конфігурованими виходять програмні рішення та наскільки приємно читається функціонально-аспектний код. Але за цю простоту розплачуються справді складні, підкапотні алгоритми, які потребують потужних засобів тестування.
Для платформи як інструмента розробки вкрай важливо максимально полегшити процес тестування програмного коду. Необхідно забезпечувати зворотну сумісність для всіх раніше створених програм на цій платформі. Дуже дратівливою є ситуація, коли добре протестована програма перестає раптом працювати після оновлення версії платформи.
Код Fractal покритий юніт- та інтеграційними тестами, але головне: туди впроваджено такі інструменти як auto- та load- тестування. Основна ідея полягає в тому, щоб дати можливість розробнику програми на Fractal у кілька кліків записати основні сценарії використання його програми на еталонній базі в стилі макросу. Кожен сценарій складається із певної кількості кроків. На кожному кроці Fractal записує action, який виконав користувач у UI, та result, який користувач отримав у UI як відповідь на цей action. Таким способом ми фіксуємо працездатність програми у всіх основних сценаріях, і відразу виявляємо проблеми, якщо з якоїсь причини ці сценарії використання були порушені. Для запуску сценаріїв тестування Fractal використовує time-back machine-прийоми, тобто коректно обробляє ситуації, коли в будь-яких queries використовується поточна дата часу або guid, що випадково генерується.
Сьогодні працездатність Fractal фіксується 37 сценаріями використання. До речі, працездатність фриланс-біржі фіксується 10 сценаріями використання.
А ось тут, за подвійним кліком, уже можна побачити деталі сценарію автотестування.
Тут у нас є різна інформація, наприклад, про час виконання сценарію. Також можна змінити налаштування, скажімо, рівень суворості перевірки результатів на кожному кроці. У цьому випадку застосовується передостанній рівень, коли ми гарантуємо, що всі атрибути та значення на сторінці відповідають еталонному тестуванню.
Також у Fractal впроваджено інструменти для load-тестування, щоб перевіряти як наша програма працює у багатопоточному навантаженому сценарії.
Таким способом на Fractal ми піклуємось про дві речі: щоб було якомога простіше покрити свою програму ефективними auto- та load-тестами і щоб після оновлень на платформі ми могли гарантувати, що програма стабільно працює без змін.
Гармонія — згода незгодного ©
Fractal Cloud
Звичайно, Fractal є унікальним інструментом. Сьогодні я використовую онлайн-кінотеатр, який був написаний на Fractal у пару десятків рядків коду; використовую аналог Jira для того, щоб вести спринти та беклог проєктів; використовую Fractal, щоб створити презентацію, щоб вести щоденник своїх спортивних результатів або навіть просто, щоб перевіряти курс криптовалют. Звичайно, всі ці аналоги побудовані за принципом «80 % користувачам потрібно 20 % функціональності». Тому той же аналог Jira в жодному разі не є повноцінним конкурентом справжньої Jira від компанії Atlassian. Проте сайт досить зручний, щоб вести спринти не те що на мобільному телефоні, а навіть на смарт телевізорі з пультом у руках, створюючи stories і змінюючи task statuses, лежачи на дивані.
Ми у Fractal дотримуємося ідеї, що якщо щось можна зробити на Fractal, воно має бути зроблене на Fractal. На це є дві прості причини.
По-перше, щоразу, коли ми створюємо аналог якогось продукту на Fractal, ми перевіряємо та підтверджуємо гіпотезу, що це справді універсальний інструмент.
По-друге, використовуючи кожен день продукти, створені на Fractal, ми проходимо весь той шлях, який проходять наші користувачі Fractal. Відчуваємо біль наших користувачів, перебуваємо з ними на одній хвилі, встигаємо впроваджувати доповнення та виправляти баги на платформі раніше, ніж з ними зіштовхнеться користувач.
Не став винятком Fractal Cloud, велика частина якого написана на самому Fractal. На сьогодні Fractal Cloud — це три віртуальні машини Jupiter, Mars та Saturn, на які ви можете деплоїти свої проєкти. За аналогією з такими clouds як Azure або AWS ми маємо базову функціональність.
- Усі деплої проєктів складаються з розгортання Application+Files+Database в інфраструктурі Fractal з використанням deployment key
- Після деплою ви можете моніторити environment, на якому розгорнуто програму, дивитися статус серверів та логи з помилками програми.
- Fractal постійно моніторить роботу розгорнутих додатків та надає звіти про їхню роботу. На малюнку нижче ми бачимо навантаження на розгорнутий застосунок, споживані ним ресурси, його швидкодію та загальну картину помилок у додатку.
- Ми маємо консоль, яка дозволяє виконувати близькі до SQL-діалекту запити по базі даних
- Ми маємо засоби для управління backups додатків. Ми можемо створювати backups, налаштовувати регулярні плани для них, розгортати їх у разі потреби. Причому backup тут більш широке поняття і може містити бінарні файли програми, не тільки базу даних.
- Ми маємо можливість завантажувати backup або конвертувати їх у реляційну базу даних. Іншими словами, якщо в якийсь момент ви вирішите вивантажити дані в традиційну RDBMS базу даних, на Fractal є можливість у кілька кліків це зробити. Власне, як і є засоби для імпорту чинних баз даних RDBMS у документоорієнтований світ Fractal. Другий випадок складніший і заслуговує на окрему статтю.
- Нарешті, ми маємо управління Payment Plans на Fractal. Перші два плани Student та Volunteer є безкоштовними. Перший план існує для знайомства з платформою, деплою своїх тестових проєктів. Другий план існує для всіх волонтерських проєктів, які Fractal хостить абсолютно безкоштовно.
Кожен план містить докладну розкладку того, що включено до вашого тарифу, а також ціни на додаткові ресурси, якщо ці ліміти будуть перевищені.
Також, у розділі Accounts, ви можете відстежувати платежі за тарифним планом та мати повну виписку щодо руху коштів на вашому балансі. Але поки що це тестова функціональність, яка запрацює повною мірою з оновленням парку серверів. Як мінімум, до того моменту, як ваш проєкт доросте до великих навантажень, ви можете розраховувати на безкоштовний хостинг, зокрема на онлайн-консультації на платформі.
Перевчатися складніше, ніж вчитися спочатку ©
Fractal Academy
Ми живемо в епоху великих змін. Технологічні стеки не просто покращуються, вони повністю видозмінюються, виходять на новий рівень. Хтось уже зазначив для себе, що пропустив революцію, пов’язану з розробкою ШІ. Але Ви маєте унікальну можливість стояти біля витоків Fractal, який, як GPT, змушує переосмислювати те, як будуть створюватися програми в майбутньому.
Функціональне програмування останніх 50 років належить до особливої касти програмістів. Багато інженерів йдуть до нього навіть не роками, а десятиліттями, перш ніж стати частиною цього ком’юніті. Функціонально-аспектне програмування змінює цю ситуацію, робить розробку додатків у функціональному стилі простою, зрозумілою і потужною для практичного застосування. Якщо ви досі не витрачали багато часу на вивчення підозрілих технологій, які пропонували вам багатомісячні програми навчання із знанням величезного зоопарку різних технологій, літературою, щоб створювати програми — я навіть трохи заздрю вам. Перевчатися складніше, ніж навчитися спочатку.
У Fractal Platform у нас є інтегрований портал для навчання. На ньому ми розмістили кілька курсів навчання, розрахованих на нульовий рівень абітурієнтів. Ми не наголошуємо на читанні великого обсягу документації. Ми наголошуємо на простому та зрозумілому відеонавчанні, на поясненні універсальних концепцій, які гармонійно поширюються на найскладніші галузі побудови програм. У нашому навчанні робиться акцент винятково на практиці, де і як це можна застосувати.
На Fractal Platform ми маємо свою Jira, свій Teams, свій Calendar для мітингів. Відповідно, вже з першого дня після прийняття на борт, ви закріплюєтеся у певному проєкті, у певній команді та вливаєтеся у процеси, які побудовані за найпопулярнішою на сьогодні методологією — Scrum.
Навчання на сьогодні абсолютно безкоштовно. У перші тижні ми просто знайомимося, вчимося, обмірковуємо проєкти, які ми хотіли б написати чи покращити. Далі, сформувавши певну кількість злагоджених команд, ми отримуємо та виконуємо комерційні замовлення.
Подати заявку можна пройшовши невелику презентацію. Наприкінці буде форма, де можна подати заявку. Кількість місць обмежена, у першій ітерації ми набираємо лише 8 команд по 8 осіб. Багато хто з першої ітерації стануть лідами та координаторами наступних команд у наступній ітерації.
Ukranian Fractal Network
Що б ви зробили, якби у ваших руках опинився інструмент, який у десятки разів скорочує час розробки та розгортання програм? Інструмент, який створює ринок там, де його не мало би бути. Можливо, ви хотіли б клонувати ютуб, тому що вам не подобається, що там занадто багато реклами. Можливо, ви хотіли зробити українську версію соціальної мережі VK. А може, написати заміну Upwork, тому що там тепер надто високі комісії? До сьогодні це видавалося досить абсурдно, але якщо час розробки скорочується від багатьох місяців до тижнів, чому не спробувати?
Окремо хочеться згадати про 1С, якому зараз шукають заміну в Україні. Fractal практично ідеально лягає на документоорієнтовану предметну область. Системи побудовані на Fractal, які у своїй основі мають сотні та тисячі entities, нагадують просто чимось великий Excel, де замість електронних таблиць у нас json-документи. Складність і ентропія такої системи зростає вкрай повільно, навіть не зважаючи на велику кількість бізнес-логіки. Більше половини системи конфігурується, а сам код виходить простим, зрозумілим та самодокументованим. Звичайно, коли ми говоримо про 1С, технічна частина рішення може виявитися не основною. Але це точно один з тих напрямків, який варто спробувати на Fractal.
Ми поставили собі амбітну мету, розвернути український ринок із сервісного на продуктовий напрямок. У перспективі залучити сотні та тисячі девелоперів у єдину онлайн екосистему, яка змінює правила гри. Не важливо Ви студент, адмін, менеджер з продажу або просто інвестор — нам потрібні фахівці різного спрямування.
Залишайте свої контактні дані після короткої презентації, або в коментарях до цьої теми, ми починаємо формування перших 8 команд і написання перших 8 проектів на Fractal Platform.
110 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів