Cіпласпластик
530 subscribers
161 photos
35 videos
2 files
256 links
🇺🇦 Про айті та дотичні теми загалом, ну й трохи про C++.

Мої емоджі:
https://t.me/addemoji/AdaptiveDevIcons
https://t.me/addemoji/VehicleBrands
Download Telegram
Ох, ну ніхуя, Qt пофіксили баг (QTBUG-77428) про hoisting let та const в #QML, який я зарепортив три роки тому ⌛️
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Взагалі сьогодні з шейдерами граюсь в #QML.

Конкретно цей я портував на 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-екрані макбука як раз все ок, а це скріншот з мого «звичайного» монітора.

Хоч бери й пиши мануал.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3👍2👏1👀1
Я вже неодноразово згадував, що моя найулюбленіша система збирання проєктів — це #Qbs. Базується цей вибір на двох суперобʼєктивних причинах авжеж: 1) на хибному першому враженні, що за мову там використовують #QML (90% збігається, але насправді це не вона, від чого реально палає нерідко), та 2) на тому, що не можу терпіти #CMake 😁

В кьюбсі в найпростішому вигляді достатньо викликати qbs build або навіть qbs run, й він все сам зробить. Втім інколи треба додати пару якихось ключів в команд-лайн, які я безумовно не памʼятаю. Що в таких випадках люди роблять першочергово? Правильно, пишуть qbs build --help. Але це суперечить концепції(!) головного розробника, тому наразі результат отакий:

ERROR: Invalid use of command 'build': Unknown option '--help'.
Type 'qbs help build' to see how to use this command.

Концептуальність — це завжди офігезно авжеж, але не тоді, коли це щодня наламує мені UX. Так, я не можу спеціально для цієї тулзи тримати в памʼяті, що треба писати qbs help build замість qbs build --help, бо в нормальних прогах це тотожні виклики.

Тож я пішов та зробив свій перший внесок в Qbs аж на пʼять рядків коду, який це виправляє 😂 Довелось заради цього навіть gerrit налаштувати собі з його ґітовими гуками.

Сьогодні вмержив 🥳🍾
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 сама по собі дуже прикольна 😢 Але недовго їй лишилось, мабуть.
Please open Telegram to view this post
VIEW IN TELEGRAM
👀1
Час охуєнних історій.

Чотири місяці тому якийсь чувак не міг зробити на #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. Так і живемо 🤷‍♂️

Поки що немає, що ще показати, але як буде більш-менш стабільним, скину посилання.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2👀1
Якщо раніше я рекомендував уникати префіксів в назвах класів, то чимдалі переконуюся, що з цього треба робити саме правило. Я про оті всі ваші 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 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2😁1