Ох, ну ніхуя, Qt пофіксили баг (QTBUG-77428) про hoisting
let
та const
в #QML, який я зарепортив три роки тому ⌛️👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Взагалі сьогодні з шейдерами граюсь в #QML.
Конкретно цей я портував на Vulkanʼівський GLSL з чийогось коду і трохи адаптував під Qt Quick. Але багато ще треба зробити, аби його можна було легко використовувати.
Думаю додати можливість виставляти «світло» де завгодно, бо зараз воно до центру привʼязане. А ще, якщо прям трохи підчитати теорію кольорів, то колір тіні має залежати від обʼєкта, який її кидає.
Нахіба це? А шоб було!
Конкретно цей я портував на Vulkanʼівський GLSL з чийогось коду і трохи адаптував під Qt Quick. Але багато ще треба зробити, аби його можна було легко використовувати.
Думаю додати можливість виставляти «світло» де завгодно, бо зараз воно до центру привʼязане. А ще, якщо прям трохи підчитати теорію кольорів, то колір тіні має залежати від обʼєкта, який її кидає.
Нахіба це? А шоб було!
👍1👀1
Натрапив до речі сьогодні на отакий #QML Online https://stephenquan.github.io/qmlonline/, що на відміну KDEʼшного https://qmlonline.kde.org, по-перше, базується на Qt 6, а по-друге, дозволяє описати одразу декілька файлів. Але все одно лайно насправді. Хіба що щось швиденько перевірити треба.
👍1👀1
Як зрозуміти, що прога написана на Qt? — Ніхто не вміє працювати з High-DPI екранами 🧐 Навіть дефолтний #QML-проєкт, що генерується в Qt Creator з офіційного шаблону, містить некоректний код для Windows.
В даному випадку бачимо завеликі іконки в macOS. Що цікаво: на рідному retina-екрані макбука як раз все ок, а це скріншот з мого «звичайного» монітора.
Хоч бери й пиши мануал.
В даному випадку бачимо завеликі іконки в macOS. Що цікаво: на рідному retina-екрані макбука як раз все ок, а це скріншот з мого «звичайного» монітора.
Хоч бери й пиши мануал.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3👍2👏1👀1
Я вже неодноразово згадував, що моя найулюбленіша система збирання проєктів — це #Qbs. Базується цей вибір на двох суперобʼєктивних причинах авжеж: 1) на хибному першому враженні, що за мову там використовують #QML (90% збігається, але насправді це не вона, від чого реально палає нерідко), та 2) на тому, що не можу терпіти #CMake 😁
В кьюбсі в найпростішому вигляді достатньо викликати
Тож я пішов та зробив свій перший внесок в Qbs аж на пʼять рядків коду, який це виправляє😂 Довелось заради цього навіть gerrit налаштувати собі з його ґітовими гуками.
Сьогодні вмержив🥳 🍾
В кьюбсі в найпростішому вигляді достатньо викликати
qbs build
або навіть qbs run
, й він все сам зробить. Втім інколи треба додати пару якихось ключів в команд-лайн, які я безумовно не памʼятаю. Що в таких випадках люди роблять першочергово? Правильно, пишуть qbs build --help
. Але це суперечить концепції(!) головного розробника, тому наразі результат отакий:ERROR: Invalid use of command 'build': Unknown option '--help'.Концептуальність — це завжди офігезно авжеж, але не тоді, коли це щодня наламує мені UX. Так, я не можу спеціально для цієї тулзи тримати в памʼяті, що треба писати
Type 'qbs help build' to see how to use this command.
qbs help build
замість qbs build --help
, бо в нормальних прогах це тотожні виклики. Тож я пішов та зробив свій перший внесок в Qbs аж на пʼять рядків коду, який це виправляє
Сьогодні вмержив
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👀1
Cіпласпластик
Отже, історія отримала розвиток. Після чергової відмови від директорки Security & Compliance надати мені APIʼшку я накатав якийсь драматичний текст про те, як на всіх all-hands нарадах компанія парить про інновації та імпрувменти, а щойно справа дійшла до…
А ще питають такі:
— А на чому писати збираєшся?
— На C++ та #QML авжеж!(Хоча зараз думаю, що легше на Python+ QML )
— У-у-у-у… Наші люди тільки на сішарпі та ангулярі вміють…
І важко їх звинуватити в чомусь. The #Qt Company просрала можливість зайняти нішу на десктопах (та й на решті систем втрачає позиції). Шкода, бо QML сама по собі дуже прикольна😢 Але недовго їй лишилось, мабуть.
— А на чому писати збираєшся?
— На C++ та #QML авжеж!
І важко їх звинуватити в чомусь. The #Qt Company просрала можливість зайняти нішу на десктопах (та й на решті систем втрачає позиції). Шкода, бо QML сама по собі дуже прикольна
Please open Telegram to view this post
VIEW IN TELEGRAM
👀1
Час охуєнних історій.
Чотири місяці тому якийсь чувак не міг зробити на #QML напівпрозорий тайтл у елемента, який би виходив за межі батьківського прямокутника (дивіться скріни). Мені це здалося цікавим, бо я полюбляю робити прототипи під настрій, тож я накидав коду й поділився своїм рішенням проблеми в чаті.
Зараз (так, за чотири місяці з тих подій) він зʼявляється знову й каже, що мій код багнутий, бо непридатний для використання з кількома подібними елементами. Типу він місяцями намагався проблему подолати, але не зміг🤣
Я щойно з цікавості витратив ще 20 хвилин, щоб зробити варіант з декількома подібними елементами (останній відос).
Короч розгадка: як виявилося, чувак —русня . (Код більше не даю авжеж 🙂 ).
Чотири місяці тому якийсь чувак не міг зробити на #QML напівпрозорий тайтл у елемента, який би виходив за межі батьківського прямокутника (дивіться скріни). Мені це здалося цікавим, бо я полюбляю робити прототипи під настрій, тож я накидав коду й поділився своїм рішенням проблеми в чаті.
Зараз (так, за чотири місяці з тих подій) він зʼявляється знову й каже, що мій код багнутий, бо непридатний для використання з кількома подібними елементами. Типу він місяцями намагався проблему подолати, але не зміг
Я щойно з цікавості витратив ще 20 хвилин, щоб зробити варіант з декількома подібними елементами (останній відос).
Короч розгадка: як виявилося, чувак —
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣7🥴2
This media is not supported in your browser
VIEW IN TELEGRAM
Зробили з друганом лібу на С++ та байндінги для #QML, щоб керувати Elgato Stream Deck напряму без їхньої офіційної апки (ну й емулятор також на випадок, якщо фізичного пристрою немає). Точніше як зробили… Здебільшого він зробив авжеж, але мені як менеджеру теж можна хизуватись, я вважаю 😇
В імплементації протокола надихалися лібою на Python, яка в свою чергу списувала у ліби на Node.js. Так і живемо🤷♂️
Поки що немає, що ще показати, але як буде більш-менш стабільним, скину посилання.
В імплементації протокола надихалися лібою на Python, яка в свою чергу списувала у ліби на Node.js. Так і живемо
Поки що немає, що ще показати, але як буде більш-менш стабільним, скину посилання.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2👀1
Якщо раніше я рекомендував уникати префіксів в назвах класів, то чимдалі переконуюся, що з цього треба робити саме правило. Я про оті всі ваші
Підозрюю, ця згубна звичка пішла з тих часів, коли мови програмування були значно примітивнішими, але вже майже чверть XXI сторіччя позаду, альо. Всі(?) використовувані в сучасному програмуванні мови мають засоби для скоупінгу імен на кшталт неймспейсів, кваліфікованих імпортів тощо.
Отже, на прикладі нашої поточної проги для мультимоніторного слайд-шоу (ну, що замовили…): є, значить, у нас модель дисплеїв, доступних в системі. Як вона називається?
Мій перший ментор казав, що
Якщо мова про C++, то можна зробити
В #QML того самого можна досягти за допомогою qualified imports. Наприклад, маючи модуль під назвою
Що маємо в результаті? По-перше, відсутні тавтологічні назви а ля
В ідеалі авжеж хотілося б мати тулзу, в яку можна зашити всі свої правила іменування та організації коду, причому не тупі банальності на кшталт «змінні з маленької, класи з великої» або «camelCase, а не snake_case», а щось глибше, як-от «короткі назви всередині ліби — повні назви зовні».
vstring
, CString
, TString
(хто памʼятає?), QString
тощо, але не тільки про них. Підозрюю, ця згубна звичка пішла з тих часів, коли мови програмування були значно примітивнішими, але вже майже чверть XXI сторіччя позаду, альо. Всі(?) використовувані в сучасному програмуванні мови мають засоби для скоупінгу імен на кшталт неймспейсів, кваліфікованих імпортів тощо.
Отже, на прикладі нашої поточної проги для мультимоніторного слайд-шоу (ну, що замовили…): є, значить, у нас модель дисплеїв, доступних в системі. Як вона називається?
DisplayModel
авжеж. Нормальна лаконічна та зрозуміла назва. Для цієї моделі є відповідна вьюшка, яка створює для кожного елементу моделі делегат. Вгадайте назви? DisplayView
та DisplayDelegate
, ага. Нє, ну а шо. Ще є DisplayInfo
, DisplayIdentificationOverlay
і тому подібне. Мій перший ментор казав, що
якщо щось повторюється двічі, то варто було б вже замислитись, а якщо тричі — то обовʼязково треба якось узагальнювати.
Якщо мова про C++, то можна зробити
namespace
, і тоді в найгіршому випадку назви будуть: Display::Model
, Display::View
, Display::Delegate
, тобто всього на два символи :
більше — а в найкращому можна зробити по місцю використання using namespace Display
, а далі просто писати Model
, View
та Delegate
. Зазвичай в книжках не рекомендують писати using namespace
, бо новачкам легко налажати, але при зваженому використанні це дуже корисна конструкція. Наш поточний підхід полягає в тому, що в cpp
-файлі з реалізацією класу ми прям одразу пишемо using
, або в деяких інших місцях в тій самій бібліотеці, але не в інших місцях використання. Іншими словами, якщо ти в контексті предметної області, то можна писати короткі імена, а якщо зовні — то повні. В #QML того самого можна досягти за допомогою qualified imports. Наприклад, маючи модуль під назвою
display
, можна імпортувати його в глобальний скоуп імен через import display
і писати всюди Model
, View
та Delegate
, але QML трохи всратий в цьому плані, бо дозволяє… ммм… to shadow (затіняти?) імена з раніше імпортованих модулів і навіть не пише ворнінг. Тож краще одразу імпортувати як import display as Display
або навіть import display as D
, якщо надто впадлу, і тоді імена компонентів перетворюються на D.Model
, D.View
та D.Delegate
відповідно.Що маємо в результаті? По-перше, відсутні тавтологічні назви а ля
Display::DisplayModel
, в яких немає жодного сенсу, по-друге, потенційно писати менше, бо можна користуватися коротшими назвами доти, доки (по-третє) не буде конфліктів імен, які легко вирішуються повними назвами. Недоліки також є: треба трохи більше контролю за тим, що, де та як писати.В ідеалі авжеж хотілося б мати тулзу, в яку можна зашити всі свої правила іменування та організації коду, причому не тупі банальності на кшталт «змінні з маленької, класи з великої» або «camelCase, а не snake_case», а щось глибше, як-от «короткі назви всередині ліби — повні назви зовні».
🔥2👀1
ISO C++ створили щорічне опитування пару днів тому (валідне буде тиждень всього).
Останнім часом на С++ тиск підсилився, бо той же Rust з memory safety підпирає. Доходить до того, що Страуструп вкотре виправдовується, мовляв, «нормальна безпечна мова — то у вас руки зі сраки».
Я в чомусь згоден, у чомусь — ні. Але ви подивіться на запитання. Наприклад, «що вас найбільше дратує в розробці на C++?» І у відповідях зокрема аж три окремі можливості зазначити, що «memory safety для мене не є проблемою»😂 (А багатьом програмістам і справді пофігу, бо це ж не вони гроші втрачатимуть якщо що).
Або: «чи дозволено вам на роботі користуватися модулями з C++20?» Ну, дозволено-то дозволено, але ж вони не працюють нормально — підтримка компіляторами щось якось частково є, а білд-системи здебільшого не альо тощо.
C++ точно не помре найближчим часом, але хз навіть, які перспективи.
Ну ви-то більшість і не плюсисти мабуть взагалі. А я на C++ досі пишу тільки тому, що мені подобається робити UI на #QML🙂
Останнім часом на С++ тиск підсилився, бо той же Rust з memory safety підпирає. Доходить до того, що Страуструп вкотре виправдовується, мовляв, «нормальна безпечна мова — то у вас руки зі сраки».
Я в чомусь згоден, у чомусь — ні. Але ви подивіться на запитання. Наприклад, «що вас найбільше дратує в розробці на C++?» І у відповідях зокрема аж три окремі можливості зазначити, що «memory safety для мене не є проблемою»
Або: «чи дозволено вам на роботі користуватися модулями з C++20?» Ну, дозволено-то дозволено, але ж вони не працюють нормально — підтримка компіляторами щось якось частково є, а білд-системи здебільшого не альо тощо.
C++ точно не помре найближчим часом, але хз навіть, які перспективи.
Ну ви-то більшість і не плюсисти мабуть взагалі. А я на C++ досі пишу тільки тому, що мені подобається робити UI на #QML
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Delivering Safe C++ - Bjarne Stroustrup - CppCon 2023
https://cppcon.org/
CppCon 2023 Early Access: https://cppcon.org/early-access
Access All 2023 Session Videos Ahead of Their Official Release To YouTube. At least 30 days exclusive access through the Early Access system. Videos will be released to the CppCon…
CppCon 2023 Early Access: https://cppcon.org/early-access
Access All 2023 Session Videos Ahead of Their Official Release To YouTube. At least 30 days exclusive access through the Early Access system. Videos will be released to the CppCon…
👍2😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Граємо з друганами у #Pathfinder майже щотижня (це такий форк D&D).
Бахнув собі за годинку(з якої хвилин 40 витратив на створення рєпи-темплейта на ґітгабі, бо задовбало щоразу всі свої депенденси сетапити) отаку тупу прогу на #QML, яка показує смугу хп. Тепер накладаю її собі на вебку через OBS, щоб у дискорді всім було видно.
Чисто валідація ідеї. Над дизайном довго не міркував — точно ще буду переробляти (як і портрет персонажа, якого наразі скрафтив отут).
Бахнув собі за годинку
Чисто валідація ідеї. Над дизайном довго не міркував — точно ще буду переробляти (як і портрет персонажа, якого наразі скрафтив отут).
👍7❤2
Сьогодні у нас не Pathfinder, а так званий «ваншот» у «Поклик Ктулху». Тож я вчора витратив трохи часу, щоб підготуватися.
На (першому) зображенні те, що я отримав від ДМа — PDF-ку зі статами готового персонажа. А на (другому) відосі — те, що цього разу вийшло у мене.
Процес створення був приблизно наступним:
Спочатку я заскріншотив портрет з PDF. В кращій якості знайти це фото не вдалося, тож я закинув його у #Photoshop та зробив upscale і розфарбування за допомогою тамтешньої ШІ-шки. Генеративною ШІ-шною заливкою додав якесь тло до фото.
В такому вигляді перекинув його у #Figma, де зробив невдалий закос під фотокартку (білі поля + тінь) та додав імʼя персонажа (шрифт Copperplate ніби пасує).
Далі знайшов на Unsplash.com фотографію старого паперу, закинув у фотошоп, видалив тло, перекинув у фігму.
Павучу діаграму мені ліньки було малювати, тож я попросив ШІ-шку (#Claude) згенерити мені код на #Python з використанням Plotly, який би малював потрібний мені radar chart. Закинув цей код в #Jupyter. Розбиратися з кольорами в тій лібі було впадлу, а ШІ-шка мені якусь хєрню парила, тож натомість я просто експортнув результат в SVG з того ж блокноту та теж закинув у фігму.
Фігма на ізічах імпортує SVG як рідні векторні меші, тож вже там розфарбував, як мені було треба, налаштував товщину ліній тощо.
Поклацав різні шрифти у фігмі та натрапив на Kyiv*Type Serif. Щось він мене приколов, тож вирішив використувувати його для всього тексту (окрім імені, так).
На цьому ліва частина була готова.
Почав накидувати приблизний дизайн правої частини вікна, додав якийсь натяк на слайдер, але на цьому вже змарудився робити це у фігмі, тож натомість пішов решту робити прямо в #QML.
Kyiv*Type — це варіабельний шрифт, тож довелося проапгрейдитися до Qt 6.7, адже вони тільки-но додали підтримку нещодавно.
Потім щось раз-два, наговнячил туди-сюди (завдяки нашій з друганом лібі
Мені особисто права нижня чверть не дуже, але як для прототипу — вельми збс вийшло. Я загалом задоволений.
На (першому) зображенні те, що я отримав від ДМа — PDF-ку зі статами готового персонажа. А на (другому) відосі — те, що цього разу вийшло у мене.
Процес створення був приблизно наступним:
Спочатку я заскріншотив портрет з PDF. В кращій якості знайти це фото не вдалося, тож я закинув його у #Photoshop та зробив upscale і розфарбування за допомогою тамтешньої ШІ-шки. Генеративною ШІ-шною заливкою додав якесь тло до фото.
В такому вигляді перекинув його у #Figma, де зробив невдалий закос під фотокартку (білі поля + тінь) та додав імʼя персонажа (шрифт Copperplate ніби пасує).
Далі знайшов на Unsplash.com фотографію старого паперу, закинув у фотошоп, видалив тло, перекинув у фігму.
Павучу діаграму мені ліньки було малювати, тож я попросив ШІ-шку (#Claude) згенерити мені код на #Python з використанням Plotly, який би малював потрібний мені radar chart. Закинув цей код в #Jupyter. Розбиратися з кольорами в тій лібі було впадлу, а ШІ-шка мені якусь хєрню парила, тож натомість я просто експортнув результат в SVG з того ж блокноту та теж закинув у фігму.
Фігма на ізічах імпортує SVG як рідні векторні меші, тож вже там розфарбував, як мені було треба, налаштував товщину ліній тощо.
Поклацав різні шрифти у фігмі та натрапив на Kyiv*Type Serif. Щось він мене приколов, тож вирішив використувувати його для всього тексту (окрім імені, так).
На цьому ліва частина була готова.
Почав накидувати приблизний дизайн правої частини вікна, додав якийсь натяк на слайдер, але на цьому вже змарудився робити це у фігмі, тож натомість пішов решту робити прямо в #QML.
Kyiv*Type — це варіабельний шрифт, тож довелося проапгрейдитися до Qt 6.7, адже вони тільки-но додали підтримку нещодавно.
Потім щось раз-два, наговнячил туди-сюди (завдяки нашій з друганом лібі
easy.reload
), і вуаля! Як вам? ))🔥6❤1👀1
Якщо хтось чекав на можливість нарешті використовувати #QML у ваших WPF-програмах під 💻 (вже ніхто не чекав) , wait no more.
Схоже, втративши купу ринків,💻 раптово збагнула, що було б непогано мати офіційні байндінги до інших мов окрім 💻 та 💻 , і хтось там у них написав кастомний нейтів хост під .NET.
Можливо, #QML — це наразі одна з найвагоміших причин, чого я досі тримаюся C++. Я просто дуже полюбляю робити UI, і саме завдяки цим двом мовам я здатен досягати найшвидших та найякісніших результатів. Python відштовхує своєю повільністю виконання та труднощами розповсюдження готових програм. А під інші мови всі байндінги сумнівної якості й написані хтозна-ким.
Це не значить, звісно, що я зараз раптово перейду на💻 , але може вони нарешті подивляться в бік чогось зручнішого та сучаснішого.
Схоже, втративши купу ринків,
Можливо, #QML — це наразі одна з найвагоміших причин, чого я досі тримаюся C++. Я просто дуже полюбляю робити UI, і саме завдяки цим двом мовам я здатен досягати найшвидших та найякісніших результатів. Python відштовхує своєю повільністю виконання та труднощами розповсюдження готових програм. А під інші мови всі байндінги сумнівної якості й написані хтозна-ким.
Це не значить, звісно, що я зараз раптово перейду на
Please open Telegram to view this post
VIEW IN TELEGRAM
www.qt.io
Qt/.NET — Using QML in a .NET WPF application
C++ and .NET interoperability with Qt/.NET. Implementing C# interfaces in C++. Extending Qt C++ abstract class in .NET. Embedding QQuickView in WPF window.
👍2👀1
Cіпласпластик
Якщо хтось чекав на можливість нарешті використовувати #QML у ваших WPF-програмах під 💻 (вже ніхто не чекав) , wait no more. Схоже, втративши купу ринків, 💻 раптово збагнула, що було б непогано мати офіційні байндінги до інших мов окрім 💻 та 💻 , і хтось там…
Ух, 💻 прям активізувалася 🤔 Нещодавно релізнули екстеншн до vscode 💻 з language server для #QML (екстеншн лайно, проте, як перший крок норм), а зараз ось зробили плагін для Gradle, щоб легше було під Android 💻 збирати.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.qt.io
Qt Gradle Plugin 1.0 Released
Qt Gradle Plugin 1.0 (QtGP) build tool has been released and can now be included in your Android builds from Maven Central.
👍3👀1