Онлайн-додаток для малювання okso.app (та що з ним робити)
Про додаток
Нещодавно я запустив мінімалістичний онлайн-додаток для малювання okso.app.
Я хотів, створити онлайн-місце, де можна було б робити швидкі ескізи, на кшталт тих, що ми робимо на папері ручкою або на дошці маркером, коли хочемо щось пояснити колезі або розібратися в чомусь самим. Так, таких додатків вже багато, але про унікальну фічу буде трохи нижче.
Вийшло ось що (https://okso.app)

Ось YouTube-версія GIF-файлу з okso.app демо про всяк випадок.
Ієрархічна структура ескізів
Ще я хотів надати можливість організувати ескізи в ієрархічну структуру «картинка-в-картинці», бо інші подібні додатки типу Excalidraw або Tldraw дають можливість створювати лише плоский список із малюнками.
Ієрархічна структура полегшує навігацію, та дозволяє не так сильно стресувати при пошуку у разі якщо таких малюнків багато.
До того ж та імплементація «картинка-в-картинці», яка виконана в okso.app надає можливість використовувати такі візуальні прийоми, як «кодінг інформації за кольором» (щось червоне, а щось чорне) та «кодінг за розміром» (більший розмір — більший акцент). Крім того, за допомогою ліній та стрілок можна показати як один ескіз залежить від іншого.
На прикладі нижче показано, що користувач може переходити з оного ескізу/сторінки в інший, натиснувши на посилання

Приклад: Ескізи структур даних
Першою концепцією, яку я спробував пояснити за допомогою простих ієрархічних ескізів, були структури даних.
Вийшов ось такий Data Structure Sketches інтерактивний ескіз

Ось YouTube-версія GIF-файлу з ескізом Структур Даних про всяк випадок.
Звичайно, охоплено не всі структури даних. І, звичайно, це не вичерпний матеріал, а скоріше шпаргалка, яка створить візуальні підказки та асоціації для наступних структур даних:
- Зв'язаний список
- Двобічно зв'язаний список
- Черга
- Стек
- Хеш-таблиця (з вирішенням хеш-колізій)
- Дерево (включаючи бінарне дерево пошуку)
- Граф
Кожну сторінку (а точніше кожне посилання на сторінку) на ескізі можна натиснути, тому ви можете заглибитися в структуру даних, яка вас цікавить. Наприклад, «Heap → Max Heap», «Heap → Min Heap», або «Heap → Array Representation».
Ескізи розділені на так звані сторінки, щоб їх було легше сприймати, щоб користувачі зосереджувалися на одній концепції за раз.
Кожна сторінка містить посилання на приклади JavaScript коду який реалізує певну структуру даних.
Ось кілька прикладів ескізів
Двобічно зв'язаний список

Дерево

Хеш-таблиця

Trie

Граф

Повний список ви можете знайти в ескізі Структури Даних.
Проблеми
Додаток знаходиться в Беті. Є багато недопрацьованих моментів. Одна з проблем, яку мобільні юзери, мабуть помітять першою, це некоректне збільшення канвасу. Інша проблема — швидкість роботи додатка, наприклад, при збільшенні/зменшенні або перетаскуванні канвасу. Але це в роботі, буду фіксити.
Зворотній зв'язок
Буде цікаво почути в коментах, як вам додаток (в його ранній стадії), може будуть якісь цікаві ідеї для нього, або занйдені баги.
Ті кому цікавий подальший розвиток додатку можуть підписатися на апдейти продукту, або зафаловити OkSo в Twitter.
13 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівВузький шрифт не завжди читається добре. Було б непогано додати кілька шрифтів різної ширини. Додати лінії з готовими стрілками на кінці. Бо ставити ще по 2 штрихи кожного разу не зручно, як і редагувати потім це все. Додати українську мову для збільшення присутності української мови в Інтернеті =)
стрілки є — можна вибрати в меню справа або хоткей «A»
Дякую за фідбек
Так, я планую додати (feedback.okso.app/feedback) підтримку інших шрифтів також.
Стрілки вже є готов. В Menu > Preferences > Tools є перелік додаткових форм/shapes, серед яких є Прямокутник, Овал та Стрілка.
Локалізацї також в плані, треба буде додати
Дуже класно зроблено! Приєднуюся до бажаючих почитати про реалізацію(:
Дуже круто! Було б классно перетворювати фріхенд на геометричну фігуру, коли намалював щось, і робиш холд ЛКМ. Так зроблено в Goodnotes, дуже зручно.
Також помітив падіння FPS з ввімкненим Grid в Firefox на MacOS
Дякую за ідеї!
Додав конвертацію фріхенда в фігуру в роадмап 👍🏻
Про FPS то зараз найбільша проблема для мене. Пробую вирішити...
Круто
Особливо сподобалось згладжування ліній під час малювання і те, що кожен об’єкт після того, як його намалювали, стає власне об’єктом і його можна крутити, масштабувати та видалити.
Ідеї щодо того, що можна було б додати
— масштабування із збереженням пропорцій/aspect ratio
— групування/розгрупування об’єктів
— редагування ламаних і/або сплайнів
— розшарювання малюнку з іншими людьми
— конектори між об’єктами — такі собі «липкі лінії»
З того, що знайшов — як поредагувати маленьку стрілку? Якщо стрілка велика, то при кліку з’являються кружечки/хендли для перетягування, але якщо стрілка мала, то тих хендлів нема.
Так, згладжування ліній працює круто завдяки perfect-freehand (тут є демка цієї ліби)
Також так, редагування кожного об'єкта то зручно. Весь малюнок/скетч — це звичайний JSON (наприклад файл data-structures.okso). Та над об'єктами того JSON-у вже проводити маніпуляції.
Дякую за ідеї!
Дуже крутий додаток. Чи можна буде очікувати у майбутньому технічні статі по реалізації ?
Конкретних планів зараз немає, але виглядає доволі цікавим написати статтю про імплементацію, корнер-кейси з перформансом (якщо мені ще вдасться їх вирішити), переваги Progressive Web App, як хендлити апдейти в React стейті якщо вони дуже часті і в реал-таймі (наприклад як оновлення стейту компонентів під час руху курсора), та інше...
А зараз, якщо коротко, то технічно проект використовує наступне:
офігенно! дякую автору!
Чудово. Навіть у беті — досить зручно. Спробую використовувати при поточному навчанні. Дякую.
very good