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

Мої емоджі:
https://t.me/addemoji/AdaptiveDevIcons
https://t.me/addemoji/VehicleBrands
Download Telegram
Спитали в коментарях щодо термопринтера, і відповідь так швидко зростала в розмірі, що я вирішив зробити це окремим дописом.

Отже, у мене три термопринтери, і всі — від Phomemo. Перший (M220) я купив собі сам, щоб друкувати наліпки, а два інших (M04S і M08F для А4) вони мені надіслали безплатно за огляд на амазоні. Щоправда, після останнього відгуку на 4 зірки більше чомусь мені не пишуть 😂

Попри одного виробника, принтери доволі різні. Перший належить категорії «business label maker»: його можна підʼєднати або по USB до компа, або по блютусу до телефона. Через BT до компа чогось не альо. Софт дозволяє генерувати штрих-коди, QR, написи, можна навіть завантажувати дані з Excel і робити пакетний друк за шаблоном. Драйвери спочатку були тільки під вінду і мак, але згодом і під лінукс зʼявилися.

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

Останній принтер можна використовувати з тією ж прогою на телефоні, що й другий. А можна просто підʼєднати дротом до компа, і система його бачить як звичайний. Бо він і є звичайний — формату А4. Тільки йому треба спеціальний папір, бо друкує він не чорнилами, а як і перші два — температурою (і через це, на жаль, тільки з одного боку). В комплекті було 10 аркушів від самих Phomemo, і якість мені дуже не сподобалася: якісь вони затонкі були. Тому я замовив собі пачку аналогічного паперу від Brother — ось він норм! Якість друку в усіх трьох — не рівня лазерним принтерам. Думаю, це через те, що їхній драйвер спочатку переганяє все в растр, причому робить це не дуже вдало.

До речі про Brother. Вони в цьому бізнесі явно довше, і загалом якість ніби краща, бо це Японія зі стажем, а не стартап з Китаю. От тільки їхній плюс-мінус аналогічний PJ-833 коштує у пʼять разів дорожче 🙂 Хоча якби я зараз брав собі щось для друку наліпок, то брав би саме Brother (як зробив мій дружбан), може навіть вживаний: по-перше, щоб він стояв завжди увімкнений і готовий до роботи, по-друге, бо в багатьох з них є штука, яка ті наліпки автоматично відрізає, щоб руками не відривати, а по-третє, через протоколи.

Під Brother банально більше готових рішень, зокрема з відкритим кодом. Взагалі-то для друку наліпок існує окремий протокол від Epson — ESC/POS, і мій Phomemo M220 нібито мав би його підтримувати. Але на практиці в мене поки щось не вийшло.

Розмовляючи на цю тему, не можна не згадати Apple світу принтерів для наліпок, сканерів штрих-кодів, терміналів тощо — компанію Zebra (вже згадував отут). З того, що я бачив, їхня продукція — це одразу мінімум 3× у ціні, а кількість фічей навіть менша. Але роблять якісно, і в них усілякі там SDK, інтеграції й «рішення»… для простих смертних це навряд доступно, хз.

Як будь-яка корпорація, що себе поважає, Zebra не могли не розробити свою власну мову для спілкування з принтером — ZPL. Вона доволі потужна, але писати й читати код нею болісно. Можете глянути приклад в оцьому онлайн-переглядачі. Хтось врешті сів і написав простішу для сприйняття мову Capybara, яка транслюється в ZPL. Не здивуюся, якщо нині компілятор навіть не збереться, бо написаний він на 🕸 ще 10 років тому 🤭

Наразі це все. Можу хіба що додати, що Phomemo мене влаштовують, особливо халявні ))
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4
В одному тільки Steam 💨 у мене 500+ ігор. Звісно, далеко не все я прям свідомо купував — більшість з них у мене з якихось бандлів або взагалі дісталися безплатно. І що більше ігор, то менше виникає бажання купити щось ще, бо й так все «потрібне» вже є.

Разом з іграми дружини й нашого спільного дружбана в нас близько 900 ігор у Steam Family. Тож у якийсь момент я зрозумів, що замість спонтанних покупок усього підряд на розпродажах значно вигідніше купувати тільки те, у що готовий грати прямо зараз — за ту ціну, яка стоїть зараз. Можете спробувати порівняти, скільки ви за гру віддали грошей і як довго потім в неї грали. Взяти щось за повну вартість і пройти повністю виявляється вигідніше, ніж купити пʼять ігор, в яких ви не просунетеся далі головного меню.

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

Зі стімом приблизно зрозуміло. Якщо гра є в спільній бібліотеці, то купувати її ще раз найчастіше немає сенсу. Але що робити з GOG, Epic Games, Xbox Games, Amazon Games, Nintendo Switch тощо? За весь час існування того ж епіка, я купив там усього три гри, але в бібліотеці їх вже понад 400 — решту отримав безплатно.

Багато хто радить GOG Galaxy, який вміє підтягувати списки звідусіль. Тільки проблема в тому, що я не користуюся GOG Galaxy — і не почну. Просто нема такої звички. Якщо треба глянути якусь гру, я завжди піду саме в Steam. Хотілося б бачити всі свої ігри саме там.

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

Тепер про те, як я автоматизував додавання всіх своїх ігор як кураторські рецензії: а ніяк! Я це все вручну зробив.

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

Тепер заходячи на сторінку з грою, я бачу, чи вона вже десь в мене є. І якось так виходить, що купувати щось нове навіть бажання вже не виникає. За 2024 рік я купив усього 12 ігор, а за 2025 — дві.

До речі, якщо тема кураторів — це щось нове для вас, то дуже раджу підписатися на Обережно, русняві ігри, які публікують застереження про ігри, зроблені москалями, а також на КУЛІ, які пишуть про наявність української локалізації в грі (офіційної чи через українізатор). В останніх і власний сайт є.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2🤡2👎1😁1
Я користувався й у деяких проєктах досі користуюся білд-системою #Qbs (неодноразово писав вище). Але як же вона мене замахала! Це просто квінтесенція того, як робити не треба.

Почав користуватися нею через очевидні переваги:
1) декларативна мова, що базується на #QML, з можливостями додавати імперативні вставки на 💻;
2) добре структуровані концепції;
3) швидкий білд без проміжних кроків;
4) не 🤮 CMake 🙂

Реальність трохи більш прозаїчна: мова там не QML, а «діалект QML» — семантика значно відрізняється, бо чинні мейнтейнери на QML ніколи й не писали, лол. Імперативні вставки на JS працюють не так, як очікуєш. Дебажити це неможливо. Нема простих способів робити банальні речі, як-от подивитися команди, які при білді запускаються. Думаєте, достатньо написати -v? А ось хєр! у такому режимі Qbs висирає гігатонну логів, які мають бодай-якийсь сенс виключно для розробників самого кьюбса. (Насправді ж треба писати --command-echo-mode command-line 🤕).

Ну а добре структуровані й логічні концепції… постійно стають на заваді! Наприклад, треба мені було задеплоїти разом зі своєю програмою теку з розширеннями QML з самої 💻. Але кьюбс нічого не знає про теки — він оперує тільки файлами, які він називає артефактами. Артефакти позначаються теґами: один артефакт може мати багато різних теґів, а одному теґу можуть належати різноманітні артефакти. Конкретні теґи опрацьовуються певними правилами. Правила містяться у модулях, на які треба додати залежність. Правило завжди має чіткі вхідні й вихідні артефакти. З усього цього Qbs будує граф правил. Але кьюбс ніколи не робить зайвої роботи — це його фішка. Він будує тільки те, що мусить. І все завжди починається з вашого найголовнішого продукту, який також має теґ.

Тобто білд-система дивиться, і така: «Ага, оцей продукт — це артефакт з теґом application. Звідки його взяти?» — і починає шукати правила, які дають на вихід application. Таким правилом є, наприклад, те, що викликає компонувальник. Воно своєю чергою вимагає на вхід якісь артефакти на кшталт obj, staticlibrary і таке інше. Де взяти їх? Ну, obj можна отримати з cpp. Ви зрозуміли, короч. Хоча це все вельми спрощено.

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

Інша тема, що всі артефакти — це унікальні сутності, навіть якщо фізично вони вказують на одні й ті ж файли. Так, я раніше написав, ніби це тотожні штуки, але не зовсім. Зібрав я, значить, залежності для QML-файлів — це певні ліби з самого кьюта. Є в мене Foo.qml, якому потрібні qlib1 і qlib2, а є Bar.qml, якому потрібні qlib2 й qlib3 — фізично всі ці ліби лежать у теці з кьютом, але для кожного продукту я створюю «віртуальні» артефакти, щоб все це правильно бачила білд-система. Потім я всі ці залежності хочу встановити в цільову теку програми. А ніііііфііііігаааа! 😡 Qbs такий: «ти встановлюєш qlib2, але там вже лежить інший!» — сґітісаI еґґоґ.

Додати до цього всього ду-у-у-уже специфічний спосіб описувати модулі й правила, причому на ES5, практичну неможливість побачити свій проєкт «очима Qbs», бажано візуально, відсутність просторів імен, що ставить хрест на перевикористанні деяких штук у різних проєктах, тяжку взаємодію з єдиним доступним там менеджером пакетів — Conan (як альтернативу радять pkg-config… у 2k25…), а також майже нульові можливості для зневадження проблемних білд-скриптів — і не лишається майже нічого, за що можна було б зачепитися (окрім того факту, що це досі не CMake 😂).

А, і ще сорци хоч і лежать на ґітгабі — але там чисто дзеркало. PR кинути не можна — треба натомість створювати патчсет на кьютовий ґерріт.

Отже, подивилися ми з друганами на все це вкотре й вирішили, що час щось міняти. Але на що саме? Один з нас розпочав аналіз альтернатив, згодом долучився я, і… здається, нам вдалося знайти непогані варіанти. Днями розповім.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8👍52🔥2🤯1
Якщо вже мова йде про вибір системи складання, то непогано б мати якісь критерії, за якими оцінювати кандидатів.

І на мою думку побудова складних 💻-програм — чудовий контрольний тест. Дивіться самі:
- Qt базується на 💻, а всі знають, що у нас в C++ компілювати складні проєкти зазвичай доволі важко;
- при цьому більшість Qt-програм — кросплатформні (принаймні ті, що пишу я);
- але також Qt — це надбудова над C++, бо там є низка тулів для генерації коду: MOC, RCC тощо — без яких усе це не працюватиме;
- якщо використовувати QML, а я завжди використовую, то ще додається ціла низка тулів, щоб генерувати правильні QML-модулі;
- безплатна версія Qt розповсюджується під LGPL, а значить найпростіший спосіб пакувати програми — через динамічне компонування. А це значить, що треба правильно розкласти побудовані бібліотеки по теках;
- та й загалом структура готової програми на трьох головних десктопних системах відрізняється: на 🪟 ліби лежать під екзешніком, на 🍏 використовуються бандли, на 🐧 просто хаос (tar.gz, AppImage, Flatpak, ну ви знаєте).

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

1. Підтримка macOS + Windows + Linux з коробки, а точніше різних компіляторів на цих системах (я не хочу памʼятати й вручну встановлювати параметри під кожний з них).
2. Я люблю пробувати «свіженьке», тому білд-система має підтримувати фічі нових стандартів C++, зокрема модулі, які вийшли ще в C++20.
3. Принаймні базова підтримка Qt: система мусить розуміти структуру цього фреймворку, а також вміти викликати всі ті додаткові тули типу meta-object compiler.
4. Бажано, щоб про QML система також знала.
5. А якщо ні, то свої власні «правила» писати має бути дуже легко! Якщо я хочу запакувати графічні асети в ресурси автоматично або обробити їх перед цим якоюсь тулзою, то не хотілося б витрачати на це тиждень.
6. Я не хочу писати «зовнішні» скрипти для цього, бо це додаткова залежність для хостової системи. Мова системи складання має задовольняти всі базові потреби типу читання/записування файлів, як бінарних, так і текстових, парсинг, виклик зовнішніх утиліт тощо.
7. До речі щодо залежностей: треба якусь зручну роботу з 3rd-parties. Тобто підтримка пекедж-менеджерів на кшталт Conan або vcpkg, або хоча б можливість стягувати щось з інтернетів (без написання власних скриптів знов-таки).
8. Пакування готової програми у звичний для системи формат: інстолери для вінди, DMG на macOS, будь-що на лінукс (там люди все одно звикли страждати). До речі, у сучасності це все треба ще й правильно підписати якимись там сертифікатами. Хто це має робити? Система побудови звісно!
9. Є штуки як той же CMake, які самі нічого не роблять, а тільки генерують інструкції для інших систем штибу make або ninja. Юніксолюби посперечаються, але на мій погляд це дурня якась! Система має білдити все сама, бо я не хочу зайвих залежностей.
10. А взагалі не тільки білдити, а ще й запускати. Мені у 2k25 ліньки шукати в теці build потрібний мені бінарь. Хочу, щоб можна було написати mega run, якщо уявна система називається mega.
11. Я пишу у VS Code, а деякі мої колеги в якихось IDE, тому непогано б мати інтеграції чи принаймні здатність генерувати compile_commands.json.
12. З роками я дійшов до плюс-мінус узагальненої структури всіх своїх проєктів. Це дуже допомагає бутстрапити нові швидко. Було б круто мати механізм перевикористання хоча б кастомних правил між цими проєктами.
13. Ну й найголовніше: побудова всього проєкту має виконуватися викликом однієї команди! Включно з отриманням усіх залежностей, а ліпше ще й зі встановленням всіх необхідних тулсетів. Не важливо, чи це CI, чи компʼютер розробника, чи ще щось — одна команда на все!

Хіба я забагато прошу?

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

Спойлер: ми не знайшли систему, яка б задовольняла всім вимогам. Але деякі виділяються на тлі решти. Досі граємося з ними. Шкода, що часу небагато.
Please open Telegram to view this post
VIEW IN TELEGRAM
16👌1