Fractal Platform: програмування, якого більше немає

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Одного разу, в одному з постів, я сказав, що прилетів сюди з 2050 року.
Мушу зізнатися, я вам казав неправду. Але цього разу я хоча б захопив із собою флешку. ©

Привіт, мене звати Вячеслав. Останні 20+ років я працюю в комерційних проєктах на різних посадах. У цій статті йтиметься про R&D проєкт, який я заснував і яким із захопленням займаюся останні 5 років. Стаття буде цікава як тим розробникам, що досить довго займаються програмуванням і нарешті хочуть знайти щось нове (нові ідеї, думки в практичному виконанні), так і новачкам в IT, які хочуть вивчити технології, що дають змогу швидко створити свій IT-продукт.

Я розповідатиму про платформу, яка повністю змінює розуміння того, з якою швидкістю та гнучкістю можна писати програми. Формально це low-code платформа, але вона відрізняється від аналогів приблизно як 3D принтер від конструктора Lego.
Якщо коротко резюмувати, Fractal справді дозволяє:

  1. Писати у 10-100 разів менше коду, порівняно із традиційними засобами розробки. Код виходить простим і функціональним, а основні технології, які потрібно знати, зводяться до Json і DQL (аналог LINQ). Близько 70 % системи може конфігуруватися в runtime.
  2. Код виходить гнучким: можливе максимальне перевикористання коду з проєктів, що існують. Вам не складно додати функціональність, яка здавалося б повинна була закладатися в самому фундаменті програми. Fractal це ідеальний інструмент для проєктів, у яких дуже активно змінюються вимоги.
  3. Незважаючи на те, що Fractal належить до low-code систем, він уже спочатку сприяє тому, щоб будувати «дорослу» архітектуру, яка добре піддається масштабуванню та тюнінгу швидкодії.

Про все це ми поговоримо докладніше, розібравши на практичних прикладах.

Прості речі повинні робитися просто, а складні — трохи складніше. ©

Твій ідеальний день

Я хочу розповісти про ідеальний день Fractal Developer.
Ви прокидаєтеся о 9-й ранку з ідеєю для свого нового проєкту. Це може бути, наприклад, форум чи соціальна мережа. А може, це багатокористувальницька гра чи тренажер? Вранці ви випиваєте чашку кави й обмірковуєте саму ідею проєкту, її користь для оточення, основні сценарії використання.

До 10-ї ранку ви починаєте думати про модель даних — вона ж фундамент, на якому буде будуватися проєкт.

До 12-ї ранку ви створили кілька колекцій json-документів, які описують предметну область програми. В обід уже можете показати першу версію програми своїм колегам. Як так, адже у вас ще немає UI? Fractal вміє вибудовувати UI-інтерфейс маючи лише прототипи json-документів у базі даних. Усі сутності можуть тепер додаватись та редагуватись, по факту ви вже реалізували повноцінний CRUD (Create / Read / Update / Delete) у додатку.

До 14-ї, покрутивши першу версію застосунку, ви вирішуєте додати більше бізнес-логіки. Можливо, це буде локалізація, права доступу, адміністрування, валідування даних, а може навіть динамічна форма на основі декількох джерел? Це майже неважливо: Fractal влаштований так, щоб завдяки CMDD (Common Multi-Dimensional Design, про нього поговоримо далі) не було обмежень у можливостях модифікації.

До 18-ї ви розгортаєте свою програму у світ, отримуєте перших користувачів та перші відгуки.

Наступний день можна використати створення унікального дизайну програми. На 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(). Ця функціональність відкриває просто епічний портал у створенні будь-яких динамічних форм, найхитріших конфігурацій, просто в кілька рядків коду.

А ось уже проєкти серйозніші:

  1. SocialNetwork — соцмережа з реєстрацією, стрічками новин, друзями, лайками та коментарями в калібрі 220 рядків коду.
  2. FreelanceResponse — фріланс біржа, що містить досить складні flow-взаємодії тендерного типу між замовниками та виконавцями. На борту реєстрація, поділ ролей між користувачами, створення завдань, відкриття секретних чатів, завантаження виконаних демо тощо. Загалом близько 10 сценаріїв. Уся бізнес логіка виписана у 440 рядків коду. На створення такого сайту можна резервувати 2-3 доби для одного девелопера.
  3. DatingGame — сайт, який моделює стару добру розраховану на багато користувачів онлайн-гру «Любов з першого погляду», з кількома раундами матчингу пар, написаний приблизно в 500 рядків коду.
  4. 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, залишивши кришталево чистим сценарій.

  1. Поділ на Dimensions дає приголомшливе читання коду. Усе-таки людський мозок — це однопотокова штука. У Fractal, якщо ми читаємо конфігурацію Security, ми читаємо конфігурацію Security. Якщо ми читаємо конфігурацію Validation, ми то це справді конфігурація Validation. Жодного змішання, що є не природним для нашого мозку. Для будь-якого конфігу єдиний формат — Json. Знаючи синтаксис Json, ви знаєте синтаксис усіх 57 Dimensions у Fractal. Порівняйте це з тим, як влаштований XML або Html, де в одному файлі ми можемо намішати стилі, скрипти, атрибути, теги і контент. За будь-якого розміру проєкту Fractal, за будь-якої кількості Dimensions у колекціях, читабельність бази даних і зрозумілість коду завжди на дуже високому рівні.
  2. Dimension — це в більшості випадків та частина програми, яка може конфігуруватися / виправлятися навіть без перезавантаження застосунку. З практики: у середньому 70 % кожного додатку на Fractal конфігурується.
  3. Dimensions дозволяє будувати ефективний pipeline, що швидко працює. У кожному конкретному місці системи в нас задіяна тільки та бізнес-логіка, яка нам необхідна. Жодного зайвого overhead за функціональністю. Наприклад, якщо в конкретній колекції бази даних нам не потрібна транзакційність, то там немає Transaction Dimension і там не виконується неєдина процесорна інструкція, що хоч якось пов’язана з транзакційністю.
  4. 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 у мене йшло всього приблизно 20-30 хвилин. А на цьому сайті лише три layouts.

Все це називається raw-інтерфейс тобто інтерфейс, який ми можемо застосувати для свого сайту на Fractal в майже необробленому вигляді.

Але, звичайно, розглядаючи тріаду для створення стандартних інтерфейсів і тепер познайомившись із raw-інтерфейсами, вся палітра створення інтерфейсів усе ще не виглядає ідеальною. Ідеальною її робить те, як усі ці методи побудови інтерфейсів поєднуються між собою. Тому що кожен вебсайт, незалежно від того, наскільки він складний, можна поділити на зовнішні та внутрішні сторінки. Візьмемо за приклад такий популярний і складний сайт як Rozetka. Він має безліч зручних та відомих екранів для користувача, але ще більше екранів приховано за фасадом. Адміністрація товарів, управління правами користувачів, управління складом, обробка замовлень, реєстрація нових продавців, звітна підсистема, внутрішня документація, листування та багато іншого. Потужність Fractal у тому, що ви можете поділити всі ці UI-сторінки на дві великі групи — для зовнішнього та внутрішнього використання. І так лише на 30 % вебсторінок треба витратити час і зробити в raw-інтерфейсі, а 70 % вебсторінок, які перебувають за фасадом програми, залишити в стандартному інтерфейсі. Це суттєво прискорює розробку front-частини програми. На «нудні» скріни, які є за фасадом вашої програми, можна не витрачати багато часу і мінімально їх кастомізувати. А на дизайн «лицьових» сторінок, які безпосередньо впливають на враження тисяч ваших користувачів, можна витратити більше часу.

Шлях без шляху © Самадхі

Database

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

Перш ніж почати, поставимо собі питання. Яка найшвидша база даних у світі? На це наївне питання насправді є цілком конкретна обґрунтована відповідь. Найшвидша база даних у світі — це чисті структури даних. Тому що будь-яка інша база даних — це завжди чисті структури даних + overhead, який привносить обв’язування самої бази даних. Дива не відбувається, швидкість бази даних — це в кінцевому підсумку кількість процесорних команд, які нам необхідно виконати на читання, запис або пошук, а також те, як вони лягають на конвеєр апаратури.

Хороший приклад — Click House, який, як відомо, не гальмує. Він починався з двох консолей, одна з яких пише файли на диск у безперервному режимі, а друга мержить готові файли злиттям. Що може бути простіше за це? Будь-яка інша база даних, яка хоч якось ускладнює цей процес, програє як мінімум у швидкості запису даних.

У Fractal замість бази даних вводиться таке поняття як Storage. Storage — це мінімальна алгоритмічна одиниця для зберігання даних типу key-value, найближча аналогія у світі СУБД — це Engine. Мінімальний, але цілком функціональний Storage можна написати всього в 300-400 рядків коду. Одні Storage можуть бути оптимізовані з ухилом на запис даних, інші Storage на читання даних, треті на маленькі документи, четверті — на великі. П’яті — на FIFO-чергу, шості — на компресію та шифрування, сьомі можуть моделювати рядкове або колоночне сховище даних. Сценаріїв безліч. Fractal реалізує концепцію, коли під одним дахом програми ми можемо зібрати бази даних різної природи.

Цей підхід дозволяє суттєво спростити архітектуру програми та зменшити комунікаційні витрати між різними потоками даних.

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

Це дає справді приголомшливу гнучкість зберігання даних, навіть у межах одного документа. Важливе зауваження: велика кількість Storages не означає, що вам потрібно із цим усім розбиратися. Також, як і в звичайних СУБД, у 95 % випадків ви абсолютно не замислюватиметеся, як зберігаються ваші дані. Ви використовуватимете універсальний збалансований Storage за замовчуванням, який буде працювати досить добре. Але в тих 5 % випадків, коли обсяги та навантаження даних вимагатимуть спеціалізованих рішень, у вас буде просто величезний арсенал можливостей вирішити це просто і зрозуміло в рамках архітектури, що існує.
Не дивуйтеся, якщо вам покажуть синтетичний тест, де Storage триматиме навантаження, скажімо, у 3-5 мільйонів операцій на секунду на запис чи читання. Або, наприклад, у стилі Click House спеціалізований Storage буде обробляти петабайти даних. Це не має жодного значення, оскільки Storage — завжди найпростіша структура алгоритму даних. Transactions, різні Undo-, Patch-механізми в Fractal реалізовані у вигляді Dimensions, тобто надбудовами над чинними Storage, які можуть бути підключені або відключені за необхідності. Так ви самі вирішуєте, наскільки хочете наблизитись до максимальних теоретичних можливостей обладнання.

Завжди йди найкоротшим шляхом. Найкоротший шлях згідний з природою © Марк Аврелій

Pefrormance

Якщо на чистоту, то яка різниця, на яких технологіях ви напишете свою програму? Нехай займе це на звичному стеку розробки у вас два тижні замість двох днів на Fractal. Світ не зміниться за два тижні. Код читається на Fractal простіше? Знаєте, синтаксис — це суб’єктивна думка; можливо, людині, яка працювала 10 років на Perl, його код буде ближчий і зрозуміліший. На Fractal виходить більш гнучкий для модифікації код? Та я вже добре знаю всі технічні вимоги для свого застосунку, і його точно не чекає якийсь істотний pivot.

Але є одне, що точно відрізняє добротну річ від неякісної. І це, звичайно, швидкість роботи або те, що безпосередньо бачить користувач. Навіть якась мінімальна неприємна затримка в інтерфейсі може відрізняти дешевий китайський телефон від брендових телефонів, що коштують в десятки разів дорожче. Швидкість — це бренд. Якщо людина звикла до швидкого та реагуючого інтерфейсу, повернутися до інтерфейсу, який усипаний якимись прогрес-барами і незрозумілими затримками, буде як мінімум неприємно. Сьогодні я радий повідомити, що на Fractal, ні на одному з 23 додатків, немає жодного прогресу-бару. Так, в основному ми маємо справу з тестовими програмами. У них досить багато функціональності, але немає суттєвого навантаження та великих обсягів даних. Оптимізація — це та історія, яка тільки починається. Це як гоночний болід, який вже викотили на трек, але в ньому все ще багато проблем та простору для інженерних рішень.

Але є один проєкт, який я вважаю доволі «дорослим». Це портал Fractal Platform. На сьогодні він моделює функціональність Jira, Slack, має свій блог. У нього інтегровані засоби для деплою та моніторингу програм Fractal Cloud, а також безліч звітів, портал для навчання та проходження іспитів студентами. Усе це навантажує складну систему прав на 12 розділів. Весь UI перекладено 7 мовами. Загальна доменна модель, за оцінками, перевищує 300-350 реляційних таблиць.

Із якою швидкістю має працювати такий застосунок? На це питання складно відповісти, але сьогодні це близько 100 мс на завантаження будь-якої сторінки. А на розігрітому кеші час падає до 12-15 мс.

Хоча це і швидше за 95 % сайтів в інтернеті, виглядає не дуже переконливо. Однак, тут необхідно враховувати, що сервер саме в цьому вимірі, це 10-ти річний ноутбук з мобільним процесором, який завжди прагне прилягти поспати. Між сервером і клієнтом беруть участь два сумні роутери і дві вайфай мережі — ніякої оптики. Взагалі ping тут займає близько 8-10 мс, на генерацію сторінки йде в межах 1 мс, решта, швидше за все, йде на супутній мережевий стек.

Звичайно, я впевнений, що доу-ефект виправить цю ситуацію і виявить безліч багів, зокрема з 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.

👍ПодобаєтьсяСподобалось10
До обраногоВ обраному9
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Дякую за відгук,

Для бекендера, який витратить місяць-третій на підівчити фронт — це все непотрібно. WordPress, Salesforce, Hybris, Shopify... Платформа на платформі. І так весь кодінг перетворився на конструктор Lego. Збираєш собі з модулів, що душа бажає.

Ну ось нещодавно в іншій темі душа забажала клонувати доу. Можна? Сумніваюсь, що можна.
Скільки б в лего не було кубиків, рано чи пізно випливає купа проблем. Пошук потрібного кубіка, інтеграція потрібного кубіка, вирішення проблем як розширити функціонал вибраного кубіка та впихнути туди щось нестандартне, нарешті ціна купівлі того кубіка ...
Натомість ФП — універсальна платформа, тож зробити клон доу можна було б, мабуть, за тиждень. На класичних інструментах розробки, де бекендер підучив фронт, ну щонайменьше 2-3 місяці. Я розумію, що світу можливо не потрібен другий доу, тож задача притягнута, але потрібен універсальний інструмент, що не обмежує.

А ви пропонуєте взяти перейти з цього свята життя на чорнобілі формочки і туду лісти? Це як на банкеті, де всі п’ють пиво і закусують шашликами, зібрати групку веганів і піти в куточок жерти броколі і запивати розсолом...

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

fraplat.com/jupiter/Weather
fraplat.com/jupiter/RawForum

Але що справді цінне, це те, що ви можете вибрати, на які скріни будете приділяти увагу а на які ні. В прикладі з fraplat.com/jupiter/Weather є html верстка, та стандартний скрін де я можу задати gps координати. Тож погоду дивляться всі та завжди, а ось gps координати, скажімо, будуть міняти рідко (як приклад). Тож ви лишаєте скрін в «чорно-білому» стилі, для змін координатів, а html верстку замовляєте в дизайнера.
Якщо ви б використовували стандартні засоби розробки й внутрішні, й зовнішні, й скріни які просто щось конфігурують вам потрібно було б дизайнити відразу з нуля та витрачати на це час.

Нащо змагатися з кимось, у кого є необмежена кількість грошей, і купа головастих задротів літкодерів? Вони всеодно напишуть краще ) Ой... Уже написали, тобто.

Насправді це міф. Великі корпоративні компанії не гнучкі, мають багато бюрократичних обмежень, та дуже повільно змінюються. Apple при Джобсу, може була чи не єдиним виключенням. Купа продуктів, які дійсно змінювали світ, Oculus, Android, OpenAI виходили з стартапів, та далі або виростали з гаражів в великі компанії, або куплялися великими корпораціями як готові продукти.

Погода незручна.Замість координат треба обласні центри: Київ, Львів, інші

Так, треба буде якось доробити в майбутньому. Найважче знайти десь дані Місто-Координати, щоб заповнити список вибору регіону.

Fractal відповідає всього на два прості питання.
1. Як написати дуже мало коду. А сам код повинен бути дуже простим, зрозумілим і конфігурованим ?
2. Як зробити так, щоб коли додаються нові вимоги до функціоналу, цей код не переписувати ?

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

dzmilcatalog.azurewebsites.net/pdp

Якщо категорії це серіали, а товари це фільми, то найближча аналогія такого сайту онлайн кінотеатр
fraplat.com/jupiter/Seasons (пароль ps)

Ваш сайт написано за

± 20 годин роботи

Сайт на Фрактал написано за 15 хвилин.

Це ми відповіли на перше питання. Теперь відповідаємо на друге питання.
Сайт на Фрактал вже має:
1. Пейджинг фільмів (в вашому випадку повинен бути пейджінг товарів)
2. Він має повнотекстовий пошук (в вашому випадку пошук товарів за іменем)

Наступна функціональність може бути (як приклад)
3. Локалізація на кілька мов
4. Кілька ролей доступу для користувачів, адміни кінотеатру/магазину
5. Редагування списку фільмів. В вашому випадку редагування списку товарів.

Тепер ви кажете що за ±20 годин у вас там зявився код на
Java/Spring/Azure/JS vanila

Тож питання, як саме потрібно переписати цей код, щоб покрити вимоги 1,2,3,4,5.
Чи може цей код взагалі не бути переписаний, або він швидко скотиться до boiler plate.
Додаток на Фрактал не тільки має всього навсього 40 рядків коду,
github.com/...​ons/SeasonsApplication.cs
він написаний з дуже правильною архітектурою, яка покриває купу кейсів по розширенню функціоналу в майбутньому.

Ці підходи зрівнювати, як зрівнювати «напридумували тут ООП, я тут в скипті на пєрл в одній процедурі все накатав». Це дуже різний дизайн систем. Дизайн Фрактал насправді, ще на дві голови вищий за ООП. Він ще більш абстрактний, та неперевершено поєднує простоту та потужність.

Насправді все легко.

5/ уже реалізовано, просто треба покласти ексельку в потрібне місце, і тригернути приховану АПІ.

4/ це трохи складніше, так як треба підключати Spring Security. Зараз корзина(і сесія) залежить від токену в куках. Немає токену — немає корзини.

По-перше, там 5 пунктів було описано, тут лише 4 та 5 пункти.
По-друге, ви замітили, як Java почала тягнути купу підозрілих базвордів, костилів над костилями. Як код який нібито виконував задачі почав потребувати переписування та купи інтеграцій з третіми системами.

А на фрактал, пейджинг це джисон:
fraplat.com/...​ionsPages/Pagination.html

Секуріті це джисон:
fraplat.com/...​nsionsPages/Security.html

Локалізація це джисон:
fraplat.com/...​nsionsPages/Language.html

Повнотекстовий пошук це джисон:
fraplat.com/...​mensionsPages/Filter.html

І так далі. Тобто нема 100500 не схожих одна на одну технологій, є один простий дизайн де ти через Dimensions конфігуриш понад 50 різноманітних параметрів системи.

Я таке чув від прихильників функціонального підходу, коли вчив як програмувати на Scala. Вони стверджували, що функціональний підхід якимось чином, чистіший, виразніший, ще купу епітетів. Все неправда. Якщо ми говоримо про практичні задачі, функціональний піхід — гірший, так як він просто когнітивно складніший. А для ООП існують паттерни, які дозволяють одному ООПшнику розуміти іншого. Саме тому ООП це командна штука і в цій парадигмі написано більшість софту.

Фрактал це не просто функціональний підхід. Я з вами згоден, чистий функціональний підхід цікавий більше для математиків. Цікавий саме ФАП — функціонально-аспектний підхід, саме він простіший та дозволяє цілі сайти писати в 40 рядків коду в одному файлі, а далі нарощувати граючись функціонал просто через аспектні діменшини. Це зосвсім інший рівень побудови систем.

Ну що хлопці, а особливо дівчата :)
Хочете себе відчути справжніми CRUD девелоперами веб сайтів ?
1. Заходите сюди fraplat.com/jupiter/JsonToWebApp
2. Вставляєте в віконце свій Json (можна досить великий)
3. Нажимаєте на кнопку «Build My Web App !»

а далі ....
1. Ви отримуєте справжній CRUD веб апп
2. Отримуєте вже задизайнену БД, яка може складатися з кількох таблиць та звязків між ними (в залежності від складності джисона)
3. Отримуєте весь прошарок з DTO та ORM, та обвязку
4. Отримуєте рендеринг фронта: текст бокси, чек бокси, таблиці, вкладені форми інше
5. Всі скріни відкриваються та зберігаються за лічені мілісекунди.

Поздоровляю, тепер ви — майже справжній Fractal Developer веб сайтів
Magic =)

Безкоштовна книжка про бази даних від авторів ScyllaDB www.scylladb.com/...​-a-free-open-source-book
Може, щось знайдете корисне

Додався ще один мікро проєкт, сайт прогнозу погоди
fraplat.com/jupiter/Weather

Чим він цікавий
1. Він написаний в 1-2 функціональних вирази. На сайті два скріни, скрін з прогнозом погоди та скрін з вибором геолокації. Бізнес логіка складається з отримання через REST джисону, його трансорфмації в зручний вигляд, та відображення на основі його прогнозу погоди
github.com/...​her/WeatherApplication.cs
2. При створенні сайтів в такому стилі, ви майже не допускаєте багів, код чистий та функціональний. Це схоже на те, як ви пишете SQL запити. Написав, воно працює з першого разу. Як не працює, ймовірно синтаксична помилка в виразі.
3. Це другий сайт на платформі який отримав «фейс ліфтинг». Багато прикладів на Фрактал, мають відверто примитивний інтерфейс. Але це лише тому, що цей інтерфейс стандартний, та коштує для розробника майже безкоштовно. Якщо в розробника є трохи більше часу, на стандартний інтерфейс завжди можна натягнути будь-яку html верстку.

Дякую всім, хто лишив контактні данні після презентації.
Ви отримали листа з інфою, аккаунтом,
та деплоймент ключом для експериментів в sandbox (пісочниці).
Для нових бажаючих, реєстрація триває, в кінці статті зверху деталі.
Гарного всім дня !

А якби я хотів BTCRate із можливостю зміни інтерфейсу на денний? Бо зараз тільки нічний?

Якщо правильно зрозумів

На окрему увагу заслуговують ще два dimensions, це — Theme і Localization.
Theme дозволяє нам змінити стандартну «чорну» палітру інтерфейсу користувача на White, LightBlue, LightGreen, LightPink. Або навіть дати можливість користувачеві
в UI вибрати кольорову тему.

Завтра можна змінити. Це хвилина діла.

Наскільки я розумію, питання було чи легко на цьому написати приблуду для торгівлі криптою.

Багато можна чого написати, не знаю, треба дивитись що там в ТЗ.
Половина Fractal написана на Fractal.
Ви уявляєте щоб половина Bubble, або Tilda чи якогось іншого LC було написано на самому собі ? Нонсенс, а тут цей бутстрап хочаб на половину, але можливий.
Зараз функціональщики мають підбадьоритись, вони то знають чого це коштує в математиці :D
В якісь момент розумієш, що програмування тепер як політ, а не повзання на животі серед кривих фреймворків. Трохи печалять звісно баги, але вони рано чи піздно пофіксяться, а загальні принципи залишаться.
Тож правильна відповідь, яку саме частину трейд площадки можна написати на FP.
Може це буде 50%, 70% або навіть 90%.

Ну, більшість С++ написана на С++.

Так, це багато каже про універсальність інструменту.

Добре. А якби я, незарєєстрований користувач, захотів би змінити на якійсь власний стиль?

Так, завтра додам Theme діменшин до BTCRate. Зараз просто не біля компьютера.

Мене цікавить скоріше те, що це можливо, а не що буде зроблено.
Я люблю власні кнопки мувити по екрану, якісь зовсім ховати — отак бавитися із інтерфейсом, у стилі DIY. Конструктор інтерфейсу він жеж тільки для створювача сайту? Чи незарєєстрований користувач також може створити власний інтерфейс обкладинку та його зберігти у себе на компьютері у вигляді QR — коду. А коли треба, десь у іншому інтернет кафе просто paste from USB
Такий собі анонім...

Додав Theme (дропдаун зверху зправа, що дає змогу вибрати кольорову палітру)
fraplat.com/jupiter/BTCRate

Щоб це зробити, це лише один рядок в коді
github.com/...​2af8e808f09cc24dadba209ad

Я люблю власні кнопки мувити по екрану

Дизайнера форм наразі немає. Є дизайнер, який орієнтований на клонування сайтів створених в інших дезайнерах, з розділу статті RAW User Interface:

Рішення прийшло несподівано. Ідея була в тому, аби не робити ще один повноцінний дизайнер форм, а зробити такий дизайнер форм, який зможе просто готову веброзмітку натягнути на стандартний інтерфейс. Так це буде просто макіяж (makeup) програми, після якого вебсайт не відрізнятиметься від кращих дизайнерських вебрішень, які трапляються в інтернеті.

Такий підхід має низку істотних переваг.
Перше: ви більше не обмежені дизайнером вебформ, можна використовувати будь-який дизайнер у будь-якому конструкторі, а потім просто скопіювати html-розмітку до себе.
Друге — це ідеальний інструмент для клонування сайтів. У вас уже є потужний інструмент для створення бізнес-логіки, все що тепер потрібно — просто провести «face lifting» сторінок вебдодатку, які повинні виглядати не в стандартному інтерфейсі.

Також, зверніть увагу ще на такий абзац з статті

Цей підхід у побудові вебформ працює значно швидше, ніж це робиться в no-code-рішеннях. Адже в no-code як мінімум потрібно перетягувати контроли з панелі інструментів на форму, дизайн grids, дизайн вкладених форм, вирівнювати їх, розміщувати контроли в GroupBox. Зв’язувати між собою сутність. А тут ваш вхідний квиток — це просто Json, який є одночасно й одиницею зберігання інформації в базі даних, і шаблоном для створення вебформи. Але, найцінніше в цьому підході — це те, що json-документи можна формувати динамічно, а значить динамічно створювати вебформи і динамічно створювати весь CRUD для цих вебформ будь-якої складності та вкладеності.

Дизайнер форм це не найшвидший спосіб побудови UI інтерфейсів. Особливо він обмежує, коли потрібно побудувати динамічну форму, де ви не знаєте точно структуру вашого документу та точну кількість та тип контролів на формі.

Трохи потестував:
1. У мене у Хромі, якщо одразу відкрити цей лінк:
fraplat.com/jupiter/BTCRate відкривається дефолтна тема Dark.
2. Я обираю мишкою White — через декілька секунд мені пише error 500
Лінк при цьому міняється на ось такий fraplat.com/jupiter
3. Якщо тепер набрати першоначальний лінк fraplat.com/jupiter/BTCRate
то відкриється уже змінена тема
У файрфоксі навіть 500 не показує — чистісінький екран

Підсумую: змінити тему можна — але для пересічного користувача це буде важко — бо він всі рефреші не вміє (спочатку навіть кеш почистив але не в ньому справа)

Щодо перетягування кнопок незарєєстрованим користувачем (не програмістом сайта — а самим користувачем — із можливістю назначати навіть функції на кнопки — як у 1С бухгалтер мені якось поназначала :) ) і зберігання їх розташування саме для нього — чому б ні? У кожного свої забаганки щодо інтерфейсів — єдина можливість вгодити кожному тут надати можливість самому щось кудись міняти. Тобто програміст надає таку можливість+дефолт, а користувач або користується або довіряє дефолтному дизайну.

P.S.
Перевірив ще й у Опері — так само — відкривається дефолт, зміна на вайт — кілька секунд — 500 + видалення із лінку бтсрейт частини — щоб зайти на новий дізайн треба знову набрати повний лінк.
P.P.S.
Ще іноді замість набору повного урлу можна browser.history.back клікнути

Дякую за розгорнуту відповідь.
На рахунок багу, подивлюся по логам.
На рахунок дефолтової теми, я зробив такий коміт.

github.com/...​ba7bc8d16364d5993913206a2

Теперь по дефолту в користувача відкривається White тема, але яку можна змінити.

Також, ThemeDimension можна більш детально налаштувати через його конфігурацію

{
  'DefaultTheme':'Dark',
  'ChooseThemeOnLoginPage':true,
  'ChooseThemeOnAllPages':true
}

Доречі це досить грязний коміт. github.com/...​ba7bc8d16364d5993913206a2

Краще це робити саме через конфігурацію Dimension, тоді вся логіка з зберіганням індивідуальної теми зберігається. Для BTCRate це не важливо, але це важливо в додатках де користувач може зареєструватися та зберегти свої індивідуальні налаштування (колір теми, мова інтерфейсу, тощо).

github.com/...​c63044c93321b1fd294723084

Взагалі, я намагаюся не турбувати підтримку за ті баги, що знаходжу. Я просто зазвичай потім знаходжу обхідний шлях і все.
У твоєму випадку ліки для бага це: одразу після вибору другой теми, коли урл зміниться на без_BTCRate та 500 error, просто клікаю стрілку назад (лівий верхній куток брозера)
Це найшвидше.
Навіть іноді думаю що у Джиру треба додати нове поле «Обхідний шлях»
Баг такий-то. Обходиться так-то.
P.S.
Ще цікаво, якщо він у тебе не відтворюється по моєму опису — то чого так?

Взагалі, я намагаюся не турбувати підтримку за ті баги, що знаходжу.

Це навпаки добре, це фідбек.

Ще цікаво, якщо він у тебе не відтворюється по моєму опису — то чого так?

Він відтворюється. В мене є спеціальний веб інтерфейс де я бачу всі баги, накшталт веб порталів Azure чи AWS.
Цей баг
IFeatureCollection has been disposed.
Object name: ’Collection’.

Та виникає при роботі з куками, коли обєкт вже діспосед. Це специфіка .net, життя реквеста, тож я думаю як пофіксити й наближчими днями я думаю буде коміт.

пише error 500


Пофіксився цей баг. В мене зараз перестав репродюситься.
Хоча там треба було б трохи кращий фікс зробити,
але з цим temporary fix теж працює.

Ні, всеж таки не допоміг, треба норм. фікс робити

Може ще щось потестувати? У мене талант баги знаходити.

Насправді відомих багів зараз досить багато в беклозі =)
Але зараз приорітет з технічного змінився на комунікаційний.
Перш за все зараз важливо побудувати процеси та навчальний процес на платформі. Іншими словами промаштабуватися в Х разів. Тож краще реєструйся (форма в кінці презентації, з обовязкових полів лише імейл) fraplat.com/jupiter/ToDoIntro
В понеділок отримаєш листа, зможеш приєднатися до тіми,
та отримати доступи до різних розділів на платформі.
Це ні до чого не забовязує, але як на мене, завжди цікаво бути у витоків чогость більшого. Оце насправді справжній челендж.
А технічна частина то таке, баги були є і будуть, та ще багато всього дороблено чи перероблено, все як завжди =)

У json прикладі car: null Не буває таких машин :) Я думаю, що ми не повинні навіть створювати поле car якщо у name немає машини. Тоді перевірка на існування властивості car буде заміною перевірки чи дорівнює властивість car null

Car це ключ, а null це його value.
Але питання, якщо узагальнити, більш цікаве та відоме як:
Null Pointer References: The Billion Dollar Mistake
hinchman-amanda.medium.com/...​llar-mistake-1e616534d485

Null — це історичний артефакт, який було зроблено в одній з перших мов програмування, тому що так було простіше зробити.
В функціональних мовах ми маємо функціональні вирази, які більш зручніші для створення бізнес логіки. Замість null використовуються dummy/dumb/empty/fake обєкти, що дає змогу працювати з ланцюжками виразів в єдиному функціональному стилі, а не з переодичними перевірками на null.

Але правда в тому, що повністю відмовитися від null вже не можливо. А все тому, що тим хлопцям в 60х роках було ліньки витратити додатково кілька годин, щоб придумати трохи краще рішення.

Ще там «Refresh» багує, спадає користувацька настройка теми, коли його клікнеш.

Ще там «Refresh» багує, спадає користувацька настройка теми, коли його клікнеш.

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

Ось як складно я зараз контролюю, чи не прийшла ціна до моїх ордерів.
www.youtube.com/watch?v=rV0_WZ9TgkM
Тому є цікава пропозиція: якщо ти добавиш пару полів — для верхньої і нижньої ціни, щоб воно пілікало коли ціна перетне ці межі, буде ще крутішим твій наглядач за ціною біткоїна
Ось трохи джава коду з мого пет проекту щоб було зрозуміло
if(currentPrice > topPrice) { do_sound_sell(); } if(currentPrice < bottomPrice) { do_sound_buy(); }

Давай поглянемо на проблему трохи масштабніше.
Якщо в тебе мета створити трейдінговий (нехай й невеличкий, але всеж таки) сайт, то потрібне ТЗ. Чи буде там реєстрація користувача, чи буде історія котирувань, різні налаштування по типу Stop Loss та інше.
Коли в тебе буде ТЗ, в тебе буде вибір. Чи створювати такий сайт за допомогою класичних засобів розробки, та витратити на це тиждні або місяці. Чи створювати це за допомогою Fractal та витратити на це кілька днів. Моя мета не створювати зараз 26й (чи який там, я вже трохи збився з рахунку) додаток самотужки, нехай й з мікрофункціоналом, а передати знання, як це можна зробити, щоб маштабувати використання платформи.

А я можу додати ті поля?
1. Поля
2. Щоб воно обновлялося через якійсь проміжок часу (тривалість якого теж щоб була змога встановити) (js SetInterval)
3. Більше мені поки що нічого не треба.

У мене ось такий ітераційний підхід. Спочатку перший крок — дві строчки, щоб створити одну/першу/саму необхідну робочу функцію. Тестую її. Працюю з нею, зарабатую із нею.
Тоді у мене появляються інтуіції, які ще можна додати функції.
Я їх виписую на картки, а тоді вибираю одну із них теж найважливішу мабуть та реалізую. Тоді знову: Тестую її. Працюю з нею, зарабатую із нею.
Тоді беру наступну картку...
Коли всі інтуції першого рівня будуть реалізовані саме таким чином, дивлюся чи є ще щось чого б хотілося.
Виписую на карту і т.д.

А ТЗ складати це морока для мене. Не моє.

1. Поля
2. Щоб воно обновлялося через якійсь проміжок часу (тривалість якого теж щоб була змога встановити) (js SetInterval)
3. Більше мені поки що нічого не треба.

Ну TЗ все одно потрібно. Fractal спонукає одразу робити «дорослу» архітектуру, а не тяп-ляп-js-SetInterval

Тож, я створив ще один додаток BTCRateStopLoss
github.com/...​oss/BTCRateApplication.cs
Деякі особливості:
1. Повідомлення відправляютьcя в телеграм. Сам провайдер відправки конфігуриться в TextMessagesDimension. Тобто в перспективі це може бути не тільки телеграм, а і смс, пошта, тощо.
github.com/...​fig/TextMessages/Document
2. Якщо повідомлення один раз відправилося, відправка припиняється. А не робиться досс користувача, біткоїн впав нижче 10 тис і в тебе за 2 години 100 повідомлень про це ...
3. Інтервал може бути сконфігуровано, наразі інтервал перевірки курсів 60 секунд. За це відповідає TimerDimension
github.com/...​/Document/0000000000.json
4. Отримувач та коридор валюти конфігуриться через веб інтерфейс, та зберігається в наступному документі
github.com/...​/Document/0000000001.json
5. Документ зберігає історію повідомлень, відправленних користувачу. Якщо буде тимчасова помилка gateway, всі повідомлення не пропадуть, а буде повторна спроба їх відправити навіть після перезавантаження сервера, як тільки gateway підніметься. Також, мати історію відправлень повідомлень дуже зручно для дебагу.

Як бачиш, на Fractal додаток написано в менше 100 рядків коду, без жодного джаваскриптового boiler plate, та відразу є купа корисної функціональності. Додаток гнучкий, має два скріни, та конфігуриться на 70%.

Додаток я протестував, але поки що не деплоїв, там потрібно прописувати ключі. Тож, якщо ти дійсно хочеш навчитися гарно і дуже швидко писати додатки, не тількі з цією мікро функціональністью, пиши мені на імейл
learn.fractal сбк gmail.com
навчишся дуже швидко збирати додатки в правильному
Функціонально-Аспектному стилі.

Цікаво, подивлюся код. А як/коли можна буде поюзати?
P.S.
Ага, треба отримати ключі щоб була змога задеплоїти самому?

Ага, треба отримати ключі щоб була змога задеплоїти самому?

Так, напиши мені на імейл, я пришлю тобі всю необхідну інфу, буде індивідуальний sandbox та ключ, ти зможеш деплоїти свої версії додатків в інфраструктурі Fractal Cloud

Дякую, відправив листа з інфо.
Як будуть питання, там є контактні данні, вже завтра буду доступний для відповідей.

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

Я обираю мишкою White — через декілька секунд мені пише error 500

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

А я зараз пишу регекспи для трансформації html віки до json файлу.
P.S.
У мене в Хромі баг ще залишився. Все те ж саме — міняю тему, через півсекунди бачу error 500, нажимаю back.history.browser — тема змінилася. Це для fraplat.com/jupiter/BTCRate
А ось у fraplat.com адмінці тема і мова міняється без цього багу.
Може якась різниця у урлах?

Дякую, ще раз гляну. Баг не простий, добре що не критичний.

Подивився ще на ToDo. Там не має можливості встановлювати користувацьку тему. Стало цікаво — а якщо зараз швидко додати таку можливість — чи баг з’явиться й тут?

Думаю з’явиться. Це загальна функіональність.
Але після останнього фіксу в мене 500 стала репродюситися рідко.
Дивлюсь, де можна логи додати, щоб відловити цю помилку з додатковою інформацією.

О! Нарешті нестабільні проблеми. Багатопоточність?
ithare.com/...​el-is-considered-harmful

О! Нарешті нестабільні проблеми. Багатопоточність?

Мабуть це не з багатопоточнісю повязано. Раніше цей баг репродюсився навіть без навантаження, десь на 3-5 запит.
Після останнього фіксу цей баг в мене зовсім вже перестав репродюситься, хоч на мобілі, хоч на десктопах.

Точно причину багу назвати не можу. Скоріж за все, там де мій код падав з помилкою, це викликало згодом якісь дуже рідкий баг повязаний з IIS, Application Pools, життєвим циклом запитів ASP.NET Core. Тобто, коли я убрав на своїй стороні цю очевидну помилку, щоб не було ексепшина, інша side помилка теж зникла.

Пофіксилося, але...
Мені здається, що у тебе погано працює механізм збереження сессії, сессійних даних. Якщо трохи потестити навіть BTCRate можна побачити різні урли у командній строці різних броузерів (як я це щойно зробив — декілька хвилин поганяв різні сторінки, поклікав туди-сюди)

Так, це треба теж пофіксити) Здається не складно, Дякую

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

У вас там event replay не можна використати для відтворення багів?

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

Нажаль, це біч складних проєктів. Зараз там майже 150к рядків коду. Якщо аутсорсних, то це вже кілька мільйонів було б.

У вас там event replay не можна використати для відтворення багів?

Є логи. Багато чого можна просто подебажити. Щоб кожен раз не перетестовувати все після змін, є Auto Tests з кілька десятків тестових сценаріїв. Тобто вбудована можливість self testing, або простіше кажучи, перевірити що кожен з тестових проєктів працює як раніше після якоїсь суперечливої зміни. Це дуже сильно допомагає, бо найгірше якщо якась нова зміна ламає щось в якомусь з 25 вже існуючих проєктів, а перетестувати все мануально після кожної зміни фізично важко.

Event replay дозволив би отримувати події та конфігурацію від кастомеру, запускати в себе в пісочниці, та 100% репродюсити баги кастомера в себе під дебагером. Але для цього треба, щоб не було багатопоточних шматків коду, і уся взаємодія з ОС була обгорнута власним шаром, котрий оці евенти записує чи відтворює.

Хм, цікава функціональність.
Але як на мене тут є кілька обмежень:
1. Автореплей мішає не тільки багатопоточність, а перш за все зміни в базі данних. Саме тому AutoTesting працює на еталонних базах.
2. Автореплей який включено на постійній основі, може сповільнювати запити користувачів
3. Автореплей повинен вміти мокати недетерміновані змінні. Наприклад час, та генеровані гуїди.

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

Автореплей мішає не тільки багатопоточність, а перш за все зміни в базі данних

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

Автореплей який включено на постійній основі, може сповільнювати запити користувачів

Несуттєво, там йде запис до циклічного буферу. Можна вмикати окремою кнопкою «зарепортити баг»

Автореплей повинен вміти мокати недетерміновані змінні. Наприклад час, та генеровані гуїди.

воно усе йде від ОС і його треба абстрагувати, щоб можна було підкласти дані, записані в користувача

ithare.com/...​nd-finite-state-machines

Це гарна теорія, але тяжко яка реалізовується на практиці. Реальна програма на кожному степі може вигрібати та обробляти десятки мегабайт данних з бази, які будуть дублюватися в рекорді реплея. Інша проблема, що сервер може бути не stateless, а він майже завжди такий. Щось кешує, десь оптимізує.

Тож по хорошому треба дампити і бд і адресний простір серверу як процесу і мокати далі всі коли до 3d party систем, включаючи ОС.

Але, саме ФП з її концепцією CMDD (в статті зверху є розділ), найбільш близький до цього, тож Autoreplay може бути всього лиш ще одним Dimension, який в паралельному вимірі каже нам, що тепер ми у всіх кутках системи читаємо снепшоти в розрізі часу. Це справді реально, можливо навіть десь в пристойні 10к-15к рядків коду, та багато думати =)

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

Ну от в геймдеві використали.

Дамп адресного простору — це класичний postmortem. Проблему бачиш, але не розумієш, як вона з’явилась.

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

Кеш — зовнішній компонент, котрий не викликає бізнес-логіку. Ми записуємо лише що відбувається на інтерфейсі бізнес-логіки з зовнішнім світом, тому дії з кешом взагалі не побачимо.

Кеш — зовнішній компонент, котрий не викликає бізнес-логіку.

Цінність кеша, якщо він під рукою, як в процесорі L2 наприклад. Тож він може бути частиною самого процессора, а це вже не stateless, та йиовірність що щось сбоїть бо стан системи особливий.

Ну от в геймдеві використали.

Доречі гарний кейс. Тому що гра це завжди складний black box, там не стільки база данних, скільки щось мале подали на вхід типу кліка мишкою і воно молотить рендерить. Тож саме в цьому кейсі з грою можливо є зміст писати replay.
В складних CRUD я не бачив. Більше просто бють систему на мікросервіси, та тестують кожен окремо. Але там інша дупа потім з відладкою.

Щож, на годиннику вже 9:55, тож 24 години, що віддавалися на ютуб MVP челендж спливли. dou.ua/...​rums/topic/44975/#2694315

За ці 24 години (з яких ефективними за компьютером були десь 7-8 годин)
я намагався імплементувати наступний функціонал, не маючи ніяких заготовок
(помятаєте метафору про 3д принтер проти конструкторів Лего).
Тож готових кубиків немає, є лише швидкий «друк» додатку.

За цей час була імплементована наступна функціональність (не всюди добре протестована, але всеж таки)
Для користувачів:
1. Реєстрація
2. Логін користувача
3. Логаут користувача
4. Редагування мого профайла
5. Створення відео каналів з тематичними тегами
6. Перегляд каналів де я власник
7. Перегляд всіх каналів в системі
8. Перегляд всіх зареєстрованих користувачів на UTube
10. Редагування інформації про канал. Видалення моїх відео, тощо
11. Завантаження (короткого) відео в відео канал
12. Перегляд відео з відеоканалу
13. Залишити коментарі під відео
14. Залишити лайк під відео
15. Підписатися на канал
16. Відписатися від каналу (доречі не імплементовано, не встиг)
17. Історія перегляду відео
18. Дашбоард (зареєстрованого) користувача складається з наступних розділів
а. Нові відео, котрі нещодавно були завантажені та не ще переглянуті користувачем
б. Нові відео що вийшли на каналах де я підписан, але ще їх не дивився
в. Рекоммендовані відео, видео з найбільшою кількістю переглядів, котрі я ще не дивився
19. Пошут каналу в списку по ключовим словам (назва, теги, власник, тощо)
20. Пошук користувачів в списку по ключовим словам
21. Кількість переглядів під кожним відео

Для адміністратора (все через веб інтерфейс)
1. Можливість заблокувати канал (IsLocked флаг)
2. Можливість редагувати любий канал в системі
3. Можливість редагувати/видаляти любого користувача із системи

На все про все вийшло приблизно ~500 рядків коду, половина з яких копіпаста з інших проектів (на платформі гарне перевикористання коду).
github.com/...​amples/Applications/UTube

Теперь що в нас з поганого. Є баги, але (сподіваюсь) не значні. Попутно знайшов пару багів в engine, але звісно щось там фіксити ... то на один баг треба щонайменьше 48 годин, код складний. Тож пощастило, що швидко завжди знаходив work around та не ліз в сам engine.
Інтерфейс, його майже немає, на верстку зовсім не залишилося часу.

Проект задеплоєно fraplat.com/jupiter/UTube
Для гостя борда виглядить як Login та Register, якщо в вас будуть проблеми з реєстрацією, просто використовуйте логін: Rebeca пароль Bob.

Також я завантажив відео Me at Bike (по аналогії з першим відео на ютуб Me at Zoo)
Хотів завантажити «я на річці», але до 2ї ночі дивився хай йому грець Семіхатова про квантову фізку і з ранку проспав майже 2 години, тож не було часу туди їхати щось знімати, треба було швидко тестувати код та деплоїтись =)

На UTube зараз три канали (Fractal, Home, Music), два користувача, та три відео.

Можливо, я завантажу пізніше ще одне відео, де детально пройдуся по кожному з 24х пунктів, та покажу як все працює, але сьогодні в пріоритеті всеж таки відпочинок :)

Всім гарного дня !

Challenge Completed

Хєх, це майже те що я хотів )
Тепер можна вантажити відео в український ютуб.
Він звісно трохи глюкавий, тож виправлення там багів займе ще щонайменьше 24-48 годин,
але з базовим сценарієм вправляється добре. Тепер в свої ченели можна вантажити відео прямо з телефона лежачі на гамаку )
Коментарі лайки теж працюють. Ніякої реклами.
Є певні проблеми з рефрешем сторінок, але то вже пізніше виправиться.

fraplat.com/jupiter/UTube

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

Дякую, вже побачив, дивлюся логи. Нарештні на третій день поклали під навантаженням )
З більш добрих нових, ізольованість в клауді плюс\мінус таки працює.
Тож сусідні мікро проекти працюють, наприклад fraplat.com/jupiter/BTCRate

Мде, досить неприємний баг. Помилка була в конфігурації Security діменшина.
Незареєстрований користувач не має права лайкати відео. Лише лишати коментарі.
Тож, коли він лайкнув, Likes зберігся як NULL, що спричинило 500ту при рендерінгу.

github.com/...​63a9fe375f201b01a5ce0504c

Зараз має працювати
fraplat.com/jupiter/UTube

Чи може це легко замінити російський софт, наприклад — 1С: Підприємство?
Якщо так — то скільки треба людей та часу на розробку? Думаю, проблема на часі, і там є гроші.

Так, звичайно. Прямо зі статті цитата

Окремо хочеться згадати про 1С, якому зараз шукають заміну в Україні. Fractal практично ідеально лягає на документоорієнтовану предметну область. Системи побудовані на Fractal, які у своїй основі мають сотні та тисячі entities, нагадують просто чимось великий Excel, де замість електронних таблиць у нас json-документи. Складність і ентропія такої системи зростає вкрай повільно, навіть не зважаючи на велику кількість бізнес-логіки. Більше половини системи конфігурується, а сам код виходить простим, зрозумілим та самодокументованим. Звичайно, коли ми говоримо про 1С, технічна частина рішення може виявитися не основною. Але це точно один з тих напрямків, який варто спробувати на Fractal.

Але зможу більш детально відписати вже завтра, оскільки сьогодні лишилося не багато часу,
тут деталі
dou.ua/...​rums/topic/44975/#2694315

Для 1С є доречі інша проблема. Загальний стандарт зберігання інформації для облікових систем є RDBMS бази данних, накшталт MS SQL\Oracle.
Але Fractal використвує свою концепцію з Storages, де транзакційність та ACID є лише надбудовами поверх Storages. Певною мірою це більш досконалий механізм, який більш добре тюниться під сценарії роботи з данними. Є навіть спеціальні діменшени Merge\Unmerge, що дозволяють видаляти вже закомічені транзакції (звісно при певних умовах) в документах, що корисно в облікових системах. TransactionDimension доречі підтримує три види транзакцій ReadCommited, RepeatableRead та Snapshot.
Але для бізнесу, все що не умовний MS SQL то є NoSQL, а значить синонім не надійності (так вже сталося, що в той же Монго транзакції заводили майже 10 років).

Певним вирішенням може бути RDBMSDimension, мета якого бути proxy, або адаптером який перенаправляє данні в MS SQL (а в перспективі в будь яку іншу бд).
Таким чином планується, що бізнес зможе мати всі переваги роботи з Fractal, а також звичну для себе реляційну базу данних під рукою для аналітики.

Але для бізнесу, все що не умовний MS SQL то є NoSQL, а значить синонім не надійності (так вже сталося, що в той же Монго транзакції заводили майже 10 років).

А до чого транзакції до надійності? База з транзакціями може навернутись, а база без транзакцій — мати 99.9999% аптайм та надлишковість шардів.

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

Але я згоден, що це трохи вже переоцінено в сучасному світі. Є певна кількість прийомів щоб навіть в NoSQL досягти прийнятної надійності.

При проводці потрібна розподілена транзакція — щоб в одної контори стало менше грошей, а в іншої — більше.

Але ж навряд чи то є проблемою написати адаптер до якоїсь SQL бази й так продавати свій 1С.

Слухай, ну я здивований. Не багато людей розуміють те що ти пишеш.
Думаю це потрібно 10-15 років відповідного досвіду. Дійсно, сучасний фінансовий світ фактично прийняв стандарт RDBMS, але всі фінансові транзакції досі ходять по принципам NoSQL. З їх блокуваннями сумм на картах, Return, Refund та синхронизацією з центральними процесінговими системами через довгі проміжки часу.
Але мій поїнт був трохи не про те. 90% людей при вибору облікової системи обовязково спитають «а гдє наш любімій пастгрєс» чи щось в такому дусі, тож дешевше їм просто вигрузити ці данні через адаптер та забути. :)
Доречі, якщо ви бачите що якісь Low Code використовує реляційну базу, то можете зразу робити помітку, що це LC з натяжкою. Якби я тягав ті стрілочки, чи блок схеми, дизайнив таблиці, в мене лише дизайн всіх таблиць та звязків між ними зайняв би до тиждня. Які там 24 години, на готовий додаток на МVP ютуба. Тож Fractal має навіть таку перевагу, якщо ваша мета просто створити досить велику реляційну БД, то зручніше це зробити в json колекціях, та просто ковертнути її в RDBMS :)

Ну є така книжка Designing Data Intensive Application, по-простому — «Кабанчик». Типу «Усе, що ви хотіли знати за бази даних, але стидались спитати».

Вибачте, ви свою RDBMS написали????

RDBMS це Relational Database.
FP живе на Key/Value, поверх якого абстракції json документів.

Докладно концепцію Storages, тобто концепція малих узкоспеціалізованих гарно масштабованих «движків» для зберігання данних, досить докладно описана в розділі Database цієї статті.
Це має цілий ряд істотних переваг.

Поздоровляю з релізом :)

Питання. Теоретичне :-) Це можна буде юзати на бекенді наприклад для іграшок? Зберігати статистику від користувачів та робити подальший аналіз через API. Навантаження невелике буде. Можливо 100к транзакцій на день.

Ех, і нехай youtube почекає 5 хвилин :)
Створив лендінг на Соціальна мережу Уєзжунька (яку колись обіцяв)
fraplat.com/jupiter/Uezjunyka

Меми оцінять ті хто в темі :)
</жарт>

Зберігати статистику від користувачів та робити подальший аналіз через API. Навантаження невелике буде. Можливо 100к транзакцій на день.

Трохи пізніше відпишу, всеж таки хочу з челендж встигнути.

Зберігати статистику від користувачів та робити подальший аналіз через API.

Не повністю зрозуміле ТЗ, але.
Як потреба зберігати метрики та далі аналізувати їх в якомусь веб UI, де ти зможешь зайти з логіном паролем, та все подивитись з графіками та табличками, то FP тобі зекономить багато часу.
Як ти хочешь просто зберігати дані без UI й надалі аналітику просто якось витягувати через REST, то мабуть легше використовувати якісь інші технології. Бо FP сильний саме в побудові складної бізнес логіки та веб інтерфейсів до неї за дуже короткий час.

ваши картинки не отображаются под vpn (германия) есишо

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

Щож, маємо гарні новини. Віртуальні машини Fractal Cloud витримали перше навантаження, помилки були але не критичні, та стосувалися в основному закритих аплікацій на Fractal.

Але пост трохи не про це. Ви знали, що 15 років тому на youtube було завантажено перший ролик на youtube, Me at zoo www.youtube.com/watch?v=jNQXAC9IVRw
Так ось, в мене є мрія завантажити такий самий, аля я на Стугні, але вже на власний ютуб.

Ну це був майже жарт, але помятаєте, що я писав про «Твій ідеальний день» в статті.
Тож на годиннику 9:37, чашку кави я вже випив (будемо вважати що 5% справи вже зроблено :D) та наступні 24 години я буду намагатися створити MVP на youtube.

В функціоналу сайту має бути.
Для користувача:
1. Реєстрація користувачів, редагування їх профайлу
2. Створення каналів відео (chanels)
3. Завантаження/Видалення відео на каналі
4. Лайки/коментарі/кількість переглядів під відео
5. Підписки на канали
6. Борд з рекомендованими відео
7. Історія перегляду відео
Для адміністратора
1. Можливість модерувати юзерів
2. Можливість модерувати канали

На все про все в мене є лише 24 години. Тож в ідеалі наступного ранку, до 10й години, я вже маю завантажити перше відео на сайт. Сказати що це мало, це не сказати нічного. На доу багато гарних спеціалістів що використовують самі різні технології. Як би не було FP, мабуть, я резервував би на цю задачу десь тіму з 5 чоловік, та щонайменьше 2-3 місяці роботи лише для MVP і це ще якщо пощастить.
Але буду чесним, я зроблю собі трохи скидку, тож гарний UI буду робити в останню чергу, сайт донор з гарним UI не так просто знайти. Але весь бізнесс функціонал має працювати так як треба.

Тож. Challenge Accepted :)

PS:
Доречі, ми продововжуємо комплектацію тімів для навчання та подальшої розробки проектів, в понеділок усі зареєстровані на почту отримують доступ до навчальних матеріалів.
fraplat.com/jupiter/ToDoIntro (реєстрація в кінці презентації)
Мета Fractal Platform дійсно істотно змініти ландшафт розробки ПО.

В функціоналу сайту має бути.
Для користувача:

От тільки ти трошки забув кілька дещо критичних аспектів функціоналу, без яких «твій ютуб» не дотягне навіть до рівня файлосховища для відосів.
1) розширений FTS який вміє в синоніми, словоформи, FTS по автоперекладу і т.д.
2) алгоритми категоризації контенту
3) алгоритми визначення вподобань користувачів
4) алгоритми відповідності і рекомендування категоризованного у п.2 контенту проаналізованим у п.3 користувачам.

Ютуб — це не бд з відеофайлами, це оці 4 пукнтіки. Ну і ще дохреніща всього, менш важливого.

От тільки ти трошки забув кілька дещо критичних аспектів функціоналу, без яких «твій ютуб» не дотягне навіть до рівня файлосховища для відосів.
1) розширений FTS який вміє в синоніми, словоформи, FTS по автоперекладу і т.д.
2) алгоритми категоризації контенту
3) алгоритми визначення вподобань користувачів
4) алгоритми відповідності і рекомендування категоризованного у п.2 контенту проаналізованим у п.3 користувачам.

Ютуб — це не бд з відеофайлами, це оці 4 пукнтіки. Ну і ще дохреніща всього, менш важливого.

1. В мене є лише 24 години на MVP (з котрих я доречі буду працювати лише 6-9 годин, бо ще й поспати треба, ще й інші справи на сьогодні).
Весь інший функціонал за дужками MVP, тож це не означає що його не можливо зробити.
Це означає що на завтрашній ранок він не буде імплементований.
Лише ті 9 пунктів (і це ще в кращому випадку).
2. Буду вдячний, якщо ти приведеш інші засоби розробки, які дозволять хочаб таке «бд з відеофайлами» з реєстрацією користувача/каналами/підписками/лайками та коментами створити та розгорнути в світ за 24 години.

Буду вдячний, якщо ти приведеш інші засоби розробки, які дозволять хочаб таке «бд з відеофайлами» з реєстрацією користувача/каналами/підписками/лайками та коментами створити та розгорнути в світ за 24 години

Мій пойнт був не в тому, що «можна за 24 години» а що не можна.

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

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

Мені здається, що ти трохи концентруєшся більше на технологіях (доречі не найкращих) чим на вирішенні саме «болю» користувача. Полишимо ютюб, ось гарний приклад з онлайн кінотеатром, він ну дуже простий, мньше 40 рядків коду.

github.com/...​ons/SeasonsApplication.cs
fraplat.com/jupiter/Seasons (Пароль ps)

Він, начебто повинен конкурувати з «дорослими» сайтами.
Але, яка альтернатива.
1. Якщо я відкриваю сайт по запиту «дивитись фільм онлайн» мені показують кожен раз рекламу казино, а від кількості банерів бравзер в моєму смарт телевізорі просто крашиться
2. Я можу скачати торентом серіал, потім записати його на флешку, потім вставити в телевізор — мені не зручно. До тогож, інколи фільми я хочу дивитися з мобільного пристрою або планшету. Треба мобільність.
3. Можна зробити з ноутбука каст екрану на телевізор, трохи зручніше. Але FPS просідає до дратівливого рівня.

Тож, щож маємо. Наче сайт дуже простий, просто список цікавих серіалів та пошук.
Але, реклами немає. Не тормозить. Зручно використовувати майже кожен день для приватного користування. Та я радий що витратив на нього всьго годину свого часу.

Тож, кожен раз коли ти дивишся на якійсь складний сайт, просто пригадай принцип Парето
"80% користувачам потрібно лише 20% функціоналу«©
І, можливо, не потрібно занадто багато часу витрачати на зайвий функціонал.
Якщо сервіс дійсно вирішує «біль» користувача, по інтерфейсу користувач буде згоден навіть на телеграм бота, не те що на «бд з відеофайлами».

Ютуб — це не бд з відеофайлами, це оці 4 пукнтіки. Ну і ще дохреніща всього, менш важливого.

Так в презентації ледь не в першому абзаці сказано, що фрактал цілиться в конкретну нішу — low code. Тому я думаю легкість з якою можна побудувати якийсь нескладний круд + нескладну кастомізація логіки цілком може бути selling point в деяких нішах.

Тут от я погоджуюсь, що саме як лоу-код платформа ця штука може і стане проривною.

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

вбивцю програмування загального призначення як явища.

Це душе широке поняття ти взяв.
Як мінімум є ринок низькорівневого програмування, ринок іграшок з складним рендерінгом тощо. Тож покрити все — не вдасться. Але різні види крудів, або все що так чи інакше будується навколо БД, так LC може покрити. А LC рівня Fractal може так, що ти, наприклад, відкриїш свій улюблений сайт Dou не зможеш його відризнити від оригінального. Ну може по latency, який буде в разів 10 краще за оригінальний сайт.
(Якщо що, черговий челендж на 24+ години щоб клонувати Доу я починати не буду, це чисто технічна оцінка чи це можливо :) )

Тут на доу є один чел який останні років багато пиляє шось дуже-дуже подібне. От буквально брат-близнюк твого проекту з діменшнами і т.д.

dou.ua/...​ers/booben-booben/topics
Походи по останнім топікам почитай

Імхо подібні проекти цікаві більш як інтеллектуальне кунгфу, але до чогось практичного не призведуть.

Тут на доу є один чел який останні років багато пиляє шось дуже-дуже подібне.

Так це він і є

даа? а чого під іншим акаунтом?
старий зашкварений?

хз, може вирішив деанонимізуватися з маркетингових міркувань)

Імхо подібні проекти цікаві більш як інтеллектуальне кунгфу, але до чогось практичного не призведуть.

Чи можете розкрити тему більш детально ?
Я вважаю що в наступні роки, Low Code системи складуть гарну конкуренцію не тільки класичним методам розробки, але й таким підходам як ШІ та GPT.
Недолік GPT, що його навчали програмувати на досить складних технологіях, при яких він допускає досить багато помилок. Але не лише в цьому проблема. Проблема в тому, що навіть якщо GPT вже майже ідеальний розробник, то на виході ви отримаєте щось накшталт такого на запит розробити форум на php:
github.com/phpbb/phpbb
А це мегабайти коду. Тож коли ви захочете внести суттєві зміни в цей код, це не буде швидко.
Натомість на таких LC як Fractal код виглядає значно коротшим та простішим,
але головне його легше підтримувати, модифікувати та читати:
github.com/...​les/Applications/RawForum

Тож, на мій погляд, це навіть більш перспективний шлях чим розвивати інструменти з ШІ.
Можливо я помиляюся. Але в відкритому доступі вже багато проектів на Fractal, тож ви як спеціаліст можете порівняти ефективність ваших поточних інструментів з проектами, що вже створені на Fractal.

Цікаво але хотілось би попробувати

Дякую за фідбек !
В кінці короткої Intro презентації є форма, де можна залишити свої контактні данні.
fraplat.com/jupiter/ToDoIntro
Увага, це не landing page. 18 вересня всі хто зареєструвався зможуть отримати права доступу на Fractal Platform та доступ до всіх навчальних матеріалів. Також номінально Ви будете закріплені за командою, що буде мати deployment key для розгортання додатків в інфраструктурі Fractal Cloud.
Мета створення команд — на першому етапі: навчання, злагодження, створення тестових портфоліо проектів. На другому етапі — виконання оплачуваних комерційних замовлень.

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

Бігло продивився опис, та не знайшов нічого пов’язаного з відлагодженням: як шукати причину багів, як їх фіксити.

Дякую за гарне питання !
Відповідь знаходиться одразу у декількох площинах.
Перша площина — як і інші платформи, Fractal Cloud має розгалуджену систему помилок.
Наразі є біля 200 різних типів помилок, кожна з котрих має свій код та тлумачення. Також при виникненні помилки в нас є логи з stack trace, які можна переглядати через веб інтерфейс на платформі.
Друга площина — більшість помилок, за досвідом, мають синтаксичний характер.
Тож в Fractal Platform інтегровано кілька валідаторів, що валідують конфігурацію перед запуском додатку, що допомогає знаходити помилки на ранніх етапах.
Третя площина — і наразі я рахую її головною, це те, що ми пишемо код в функціоно-аспектному стилі (ФАП). Тож в переважній кількості випадків цей код працює з першого разу. Це нагадує те, як ми пишемо запити до бази данних SQL. Зазвичай, на відміну від імперативного коду, нам не потрібно займатись низькорівневим дебагом коду накшталт SELECT * FROM .... Якщо щось не працює, то помилка зазвичай знаходиться десь на поверхні і її легко знайти. Тож Fractal Platform наближається саме до цієї моделі відлагодження коду.
Крім цього, в складних випадках помилок, команди що розробляють додатки можуть замовити консультацію Core тіми на платформі, та отримати вичерпну інформацію про причини помилки.
Також на FP створено спеціальний форум для комьюніті, де можна обговорити причини виникнення помилок та ділитися досвідом.
fraplat.com/jupiter/RawForum

Якщо щось не працює, то помилка зазвичай знаходиться десь на поверхні і її легко знайти.

Виглядає як срібляна куля, писати код без багів. За 70 років розвитку IT найсвітліші голови розвивали цю тему, але гарного рішення не дуже видно.

Крім цього, в складних випадках помилок, команди що розробляють додатки можуть замовити консультацію

Мова йде не про помилку, а про ситуацію, коли воно працює, але не так, як потрібно. У звичайній мові програмування я відлагоджую код покроково, щоб зрозуміти де пішло не так, як треба. Тут мені пропонується звертатися до команди спеціалістів. Але часто щоб навіть зрозуміти багу треба зануритися у предметну галузь.

Виглядає як срібляна куля, писати код без багів. За 70 років розвитку IT найсвітліші голови розвивали цю тему, але гарного рішення не дуже видно.

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

github.com/...​s/ToDo/ToDoApplication.cs

При цьому, якщо писати такий же додаток за допомогою інших мов програмування, з залученням ORM, REST, Dto, MVC, JS та інших прийомів програмування, то звісно простір для допущення помилки значно ширший.

Мова йде не про помилку, а про ситуацію, коли воно працює, але не так, як потрібно. У звичайній мові програмування я відлагоджую код покроково, щоб зрозуміти де пішло не так, як треба. Тут мені пропонується звертатися до команди спеціалістів.

Так, звичайно є певний артефакт Low Code систем, які для девелопера виглядають як Black Box, особливо коли зтикаєшся з платформою перший раз. Але FP дає перевагу в швидкості розробки застосунків, тому навіть в найгіршому випадку «розробка на FP + консультації» може виявитися набагато коротшим шляхом, ніж «звичайні інструменти розробки + багато дебагу».

Ще один хороший приклад, це онлайн кінотеатр серіалів, був написаний і задеплоєний кілька днів тому всього десь за 30-60 хвилин. Він дуже простий і при його написанні було всього кілька нескладних багів. Причина створення — перегляд серіалів на смарт тв, планшеті, мобільному тощо без реклами казино.

github.com/...​ons/SeasonsApplication.cs

Пароль ps (лише для друзів з Dou :))
fraplat.com/jupiter/Seasons

Ви можете порівняти складність написання цього проекту на ваших поточних інструментах розробки. Та навіть з застосуванням таких інструментів як Chat GPT.

Наприклад, типовий код ToDoList виглядає лише як один функціональний вираз.

Ну... що функціональний вираз, що імперативний, помилку там допустити однаково. Але... GetFirstDoc. А чому не GetLastDoc? Ось тобі можлива помилка. Не кажучи про те, що у певний момент нам схочеться узяти елемент з декількох контейнерів, зробити підказки, як це краще зробити, ... А потім, коли контейнер отримується як послідовність десяти дій ще з певними умовами, а не виході інколи відкривається не той документ, то й винимає питання, де пійшло не так.

Так, звичайно є певний артефакт Low Code систем, які для девелопера виглядають як Black Box, особливо коли зтикаєшся з платформою перший раз.

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

Ще один хороший приклад, це онлайн кінотеатр серіалів, був написаний і задеплоєний кілька днів тому всього десь за 30-60 хвилин.

Звісно, розробники системи можуть це. Часто тому, що вони знають обмеження системи й можуть зробити це в цих обмеженнях, не торкаючи слизькі моменти. Це не кажучи про те, що вони самі мали на увазі розробку кинотеатру, до рухали систему в цьому напрямку.

Але... GetFirstDoc. А чому не GetLastDoc? Ось тобі можлива помилка.

Насправді буде працювати і з GetLastDoc, тому що в колекції всього один документ, який ми редагуємо
github.com/...​/Document/0000000001.json

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

Звичайно є прості приклади, які пишуться просто. Є складніші, які пишуться більш складно.
Але важливо, що все створюється в єдиному стилі, тому при певному досвіді все не виглядає як набір трюків. Наприклад тут моделюється OnlineShop, з категоріямі товарів, з продуктами, з фасетним пошуком. Документи тут збираються з кількох джерел в кілька етапів.
Код складніший, але це все ще лише просто набір функціональних виразів які досить прості для розуміння, зібрані в одному файлі.
github.com/...​s/Applications/OnlineShop

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

Так, тому на FP створено більше 20 різних додатків. Головним критерієм вибору для створення було — протестувати гіпотезу, що це дійсно універсальний інструмент. Тому, якщо ви захочете створити свій додаток, або модифікувати існуючий, дуже ймовірно що знайдеться вже готовий робочий приклад. FP гарний тим, що дійсно нагадує 3D принтер, який мінімально обмежує можливості розробки (за рахунок CMDD). В той час як інші Low Code системи більше нагадують Lego конструктор.

Якщо в вас є гарна ідея для проекту, ми залюбки зможемо спробувати зробити прототип, або привести існуючи приклади, де вже реалізована схожа функціональність.

Ну... звісно, якщо у нас в колекції один елемент, то помилитися складно. Але життя зазвичай складніше. Тому мене більше цікавить не те, як можна швидко щось накидати. Чесно кажучи, у світі існує багато інструментів, які дозволяють щось швидко накидати. Але мене більше турбує, як зручно у цьому шукати причини неочікуваної поведінки, бо у мене написання коду це 5-10%, фікс різних помилок — решта 90%. Ок, я відповідь зрозумів, ви вважаєте що «помилка зазвичай знаходиться десь на поверхні і її легко знайти» плюс «в складних випадках помилок, команди що розробляють додатки можуть замовити консультацію».

Якщо в вас є гарна ідея для проекту, ми залюбки зможемо спробувати зробити прототип, або привести існуючи приклади, де вже реалізована схожа функціональність.

Ну... у мене є простенький інтерфейс, де можна пограти з моєю програмою у шашки:
mustitz.host.funtoo.org:2201
Мій рушій на сервері вміє видавати трохи більше інформації (наприклад оцінку з tablebase). Хотілося б її прокинути нагору. Тобто щось на кшталт lichess, lidraughts. Використати WebSockets або quic

Далі, у мене є також консольна програма для гри у футбол на аркуші паперу youtube. Хотілося б написати щось подібне у web.

Далі, усі існуючи шахові бази даних орієнтуються на партії. Мені було б цікаво написати базу, яка б орієнтувалася на позиції. Наприклад для кожної позиції ми можемо прочитати коментарі з усіх книжок, щось на кшталт wiki. Щось подібне є на lichess, але мені хочеться своє.

Також база даних футбольних результатів, щоб можна було зручно відстежувати ігри одного гравця, тримати посилання на відео або torrent-и, ...

Мій рушій на сервері вміє видавати трохи більше інформації (наприклад оцінку з tablebase). Хотілося б її прокинути нагору. Тобто щось на кшталт lichess, lidraughts. Використати WebSockets або quic

Звісно, але для цього Вам потрібно буде зробити REST сервіс, який віддає Json з оцінками tablebase. Як тільки ваш рушій зможе віддавати такий Json, Fractal побудує весь інтерфейс навколо Json автоматично. А також дасть змогу кастомізувати інтерфейс при потребі.

Далі, у мене є також консольна програма для гри у футбол на аркуші паперу youtube. Хотілося б написати щось подібне у web.

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

Далі, усі існуючи шахові бази даних орієнтуються на партії. Мені було б цікаво написати базу, яка б орієнтувалася на позиції. Наприклад для кожної позиції ми можемо прочитати коментарі з усіх книжок, щось на кшталт wiki. Щось подібне є на lichess, але мені хочеться своє.

Так, все що пов’язано з CRUD, пошуком, потоками данних, зберіганням інформації дуже гарно створювати на Fractal. Перш за все вам потрібно створити таку базу данних/колекцію json документів з партіями, та визначитись з алгоритмами пошуку/матчінгу партій згідно поточній ситуації на дошці. Це спецефічне і головне над чим потрібно буде попрацювати в цій задачі. Все інше, зберігання, редагування, пошук, пейджинг, адміністрування, історія переглядів, реєстрація користувачів і тп. ви отримуєте з Fractal майже безкоштовно, що скоротить час розробки додатку у надцять разів.

Як тільки ваш рушій зможе віддавати такий Json, Fractal побудує весь інтерфейс навколо Json автоматично.

Ну... одна з частин інтерфейсу це позиція у шашках. Цікаво, звідки Fractal буде знати, як її намалювати? Також приємно робити ходи на шахівниці, а не вибирати їх у списку. Знову ж таки, де гарантії, що автоматично згенерований інтерфейс буде таким, як я хочу?

Перш за все вам потрібно створити таку базу данних/колекцію json документів з партіями, та визначитись з алгоритмами пошуку/матчінгу партій згідно поточній ситуації на дошці. Це спецефічне і головне над чим потрібно буде попрацювати в цій задачі.

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

Універсалізм у всьому схожий на проституцію. Використання універсальних рішень часто призводить до того, що 90% функціоналу тобі не потрібно. Наприклад, якщо брати шахову wiki, то історія переглядів, реєстрація користувачів і т. п. мені не потрібна. Але вона є та тормозить. А навіть 5% унікального, що мені потрібно (намалювати шахівницю та вводити ходи) складає проблему.

Ну... одна з частин інтерфейсу це позиція у шашках. Цікаво, звідки Fractal буде знати, як її намалювати? Також приємно робити ходи на шахівниці, а не вибирати їх у списку. Знову ж таки, де гарантії, що автоматично згенерований інтерфейс буде таким, як я хочу?

Fractal прогресивно підходить до рендеру інтерфейсів. Standard UI (що описаний в статті) для нас цінний тим, що він нам дістається безкоштовно. Маючи лише Json, Fractal вміє на основі його побудувати цілу серію форм.
В багатьох випадків цього достатньо, але в більш складних випадках, в нас є такий інструмент як RenderForm.
github.com/...​ations/Chat/RenderForm.cs
Ми можемо рендерити будь-який інтерфейс, будь-який html.
Ось приклад рендеру подібного інтерфейсу до шахової дошки.
Це календар мітингів на платформі.
ibb.co/Cwg3HkX

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

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

Оце насправді питання на мільйон. В розділі Database статті описується саме концепція, коли в вузьких випадках ми можемо створити свій унікальний рушій (Storage) та заінжектити його для зберігання та пошуку інформації. Якщо типові бази данних, накшталт, Mongo чи PostgreSQL не дають нам такої гнучкості, та вносять свій overhead, лише Fractal дає змогу дійсно добре затюнити прошарок зберігання інформації зпустившись на рівень простих та ефективних структур данних створених під задачу.
В статті в розділі Database це питання розкрите більш змістовно.

Підписатись на коментарі