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

Мої емоджі:
https://t.me/addemoji/AdaptiveDevIcons
https://t.me/addemoji/VehicleBrands
Download Telegram
Стан справ у відносно сучасній #macOS: вже щонайменше три major-версії операційної системи час від часу сам по собі змінюється баланс аудіопристрою. Якщо хтось раптом подумав, що це якась дуже специфічна локальна проблема у мене, то ні — люди навіть написали окрему програму (яку продавали за гроші, але згодом зробили безплатною), що моніторить баланс та повертає його на середину 🤦

І так, у мене Monterey досі. На іншому ноуті взагалі Catalina була, хоча нещодавно оновив до Ventura чи шо там передостаннє. Але готов закластися, що в Sonoma баг досі не пофікшений. Уникаю major-оновлень, бо по відчуттях кожна нова версія додає ще більше багів, а не фіксів )) Це старість, схоже.
Please open Telegram to view this post
VIEW IN TELEGRAM
👀1
Forwarded from Bite the Byte
Хочу вам розповісти за “ДрукАрмію”. Це дуже крута ініціатива з 3д-друку різних невеличких конструкцій, які потім використовуються в армії і навколо. У них є лендінг з прикладами і розрахунками економії. В мене ще є розповіді про приблизно такі самі гроші, але про дрони — проте не вистачає даних, щоб тут описати.

В мене вже кілька друзів долучилося — і здається, що такий умовно кустарний підхід має сенс має сенс, бо поставити друкування на поток і зробити індустріальним виходить дуже дорого: місця займає багато, друкує довго і потребує обслуговування. А коли ти робиш це сам вдома, то воно стоїть собі у куточку і сильно багато часу не займає. :) А ДрукАрмія - це маркетплейс фактично, зв’язує виробництво (вас) і покупців (військових), просто без грошей.

Тож якщо ви про це не чули, або не задумувалися, то може це саме час. 😁 Бо кількість запитів на друк росте куди швидше кількості друкарів.
👍8
Як довго працюєш над чимось, то зазвичай око замилюється, і стає важко раціонально оцінювати результати праці. Це актуально, мабуть, для будь-чого, де критеріїв для оцінювання або немає, або вони дуже складні: мистецтво, програмування тощо. Тож зрештою думка трохи підмагнічується чи то до «все лайно», чи до «наскільки ж офігенно».

Час мені автівку нову брати, тож думаю, чи не взяти собі щось трохи дорожче цього разу, ніж моя Куга. Пішов дивитись Мерседеси, бо дарма ми MBUX робимо вже 9 років чи шо? (Хоча я особисто цим вже два роки не займаюсь безпосередньо).

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

А тут сів в GLC, потикався, замислився над повсякденним використанням. Інтерʼєр безперечно крутезний, інфотейнмент-система наша дуууже крута — тупо найкраще, що є на ринку — дуже швидка й красива. Звук в моєму Форді взагалі в порівнянні наче годинник «Montana» проти студійного запису 😂 АЛЕ! Я раптом збагнув, що окрім навігації у своєму автомобілі я здебільшого користуюся ще двома крутилками: гучність та температура. І все. А тут клімат повністю сенсорний на тачскріні, а гучність — маленький тачбар справа під екраном, причому + та − навіть не реагують на натискання чи дотик — тільки на свайп. І коли гучність регулюєш, то на екрані зʼявляється слайдер, але без циферок )) Ми з дружиною звикли, що коли разом їдемо, то ставимо на 6–7, щоб і музло норм чутно було, і поговорити можна. Коли я сам їжджу, то на 9 ставлю. А тут тупо слайдер.

Ну добре, годі про «преміальний» GLC. Сіли потім з дружиною в «бюджетний» GLA — і це зовсім інша справа! Нормальні хардварні контроли. І коштує на 30к євро менше 😅 Так, я розумію, що різниця між ними не тільки в цьому, але що важливіше обʼєктивно: дрібнички, які дратуватимуть щоразу, як сідаєш за кермо, чи ті пів секунди при розгоні від 0 до 100? В GLA навіть ручки на дверях зсередини зручніші ) Дуже дивні відчуття.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
Cіпласпластик
Як на людину, яка живе навіть не в місті, а в смт, та переважно сидить вдома, я якось забагато цікавлюся засобами індивідуальної мобільності. Наприклад, в мене є вже другий електроскейт (а до того був і звичайний), щоправда трохи важкуватий. А ще я досі…
О, а оце вже точно цікаво. Kawasaki зробила гібридний мот 🙂🏍 з двигуном на майже півлітра та мотором на 9 кВт (мені це ні про що не каже, але може хтось шарить). Кажуть, наче, пального має витрачати як 250cc, а від нуля до сотні жене наче літровий. (А ще назад може їхати 😍).

Кавасакі мені не подобаються. Памʼятаю, керував якимсь Ninja на 400 кубів, і вражений не був ) Але сам тренд з гібридами цікавий.

Тільки не розумію оцієї теми з використанням пального. Дивишся автівки такий, а там пишуть: споживання 1,1 л / 100 км. І спочатку думаєш: «WTF?» — А далі авжеж одразу: «А-а-а-а, plug-in hybrid…» — Так ось запитання: а чого електрику не враховують ніде, наче вона безплатна? ) Писали б краще вже, скільки воно жере, коли батарейка в нуль.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Cіпласпластик
О, а оце вже точно цікаво. Kawasaki зробила гібридний мот 🙂🏍 з двигуном на майже півлітра та мотором на 9 кВт (мені це ні про що не каже, але може хтось шарить). Кажуть, наче, пального має витрачати як 250cc, а від нуля до сотні жене наче літровий. (А ще назад…
Але ще цікавіше — їхній, з вашого дозволу… кхм…, instrument cluster. Та й не тільки їхній, а в цілому на мотоциклах здебільшого. Чого вони всі виглядають, наче NFS: Underground вийшла вчора? Я ще розумію, коли подібне робили на багатосегментних дисплеях, але ж зараз це тупо піксельний екран — малюй там, що хочеш. Я б попрацював на проєкті HMI для мотів, ех. (А то забагато там механічних контролів, час переходити на тач ггг).

Хоча у мене на Хонді до речі вельми непогано візуально виглядає, проте, по фічах нуль.
👀1
Сьогодні дізнався, що в #Git можна мати декілька робочих копій проєкту в одному клоні репозиторію.

Вони прям пишуть приклад:

You are in the middle of a refactoring session and your boss comes in and demands that you fix something immediately. You might typically use git-stash to store your changes away temporarily, however, your working tree is in such a state of disarray (with new, moved, and removed files, and other bits and pieces strewn around) that you don’t want to risk disturbing any of it. Instead, you create a temporary linked worktree to make the emergency fix, remove it when done, and then resume your earlier refactoring session.


Я бував в подібній ситуації неодноразово. В деяких випадках я навіть просто робив другий клон рєпи, хоча це не завжди зручно, особливо коли вона важить 20+ ГБ 😅

Користуйтеся на здоровʼя.
#TIL
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
Тру сторі. (Я належу щонайменше трьом категоріям).
👍3😁31
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
This media is not supported in your browser
VIEW IN TELEGRAM
Інколи навіть в лінуксі можна побачити щось прийнятне на вигляд. На днях натрапив на тайловий композитор під Wayland — Hyprland. На плюсах написаний, до речі.
👀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
Всі, мабуть, вже давно в темі, а от я тільки нещодавно відкрив для себе таку штуку як SponsorBlock. Це таке розширення для ютубу, яке дозволяє одним людям помічати на відосах відрізки з різним офтопом, рекламою та рекомендаціями, «тисніть палець вгору, підписуйтеся на канал», опенінги/ендінги/титри тощо, а іншим (або тим самим) людям — цим всім користуватися. Наприклад, автоматично чи вручну пропускати. Типовий краудсорсинг короч.

На скріншоті вище як раз показано, як хтось позначив «основну частину» в доповіді про C++ довжиною в годину 😂

Користуйтеся короч, але памʼятайте, що якщо вам реально подобається зміст відео, то краще справді хоча б поставити 👍. Бо це реально підтримка. У них там конкуренція по метриках — жах ) (Та й тут уподобайки нікому не завадять до речі!)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7😁1🤯1
Скільки часу треба, щоб побудувати ефективну команду?

У нас на це пішло близько трьох років. (Насправді менше, я думаю, але «докази» у вигляді чітких результатів зʼявилися тільки зараз).

Більшість з цього часу ми працювали над одним продуктом, який виростили фактично з нуля до дивовижного рівня. Але кожен реліз у нас затримувався на 2–3 тижні відносно плану, і це трохи дратувало. Ретроспективно я бачу, що скоріш за все наші естімейти завжди були плюс-мінус вірними, але затримка, що виникла одного разу, далі просто переносилася з майлстоуну в майлстоун, хоча варто було просто хоч раз докинути ці два — три тижні в план та виправити зсув.

Втім нещодавно нам випала нагода зробити ще один новий продукт з нуля у вельми стиснуті терміни — за три місяці. По естімейтах ніби все виходило ок, хоча план і був доволі щільний та амбіційний. Ми почали на тиждень пізніше, бо знов затрималися з попереднім проєктом, а скінчили десь на тиждень раніше! Дуже приємно хоч зрідка щось встигати до дедлайнів 😅 Користуючись нагодою, до вашої уваги найкоротший майстер-клас з естимації:
Домножуйте початкові числа на півтора, а краще на два 😉


Командо, якщо ви це читаєте, то дякую ще раз за чудову роботу та приємне спілкування 😊 Пишаюся вами та всім, чого ми разом досягли!

(І шкода, що з нового року наші шляхи розходяться. Але це не вперше, тож може ще зійдуться назад).
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🏆1
Cіпласпластик
Скільки часу треба, щоб побудувати ефективну команду? У нас на це пішло близько трьох років. (Насправді менше, я думаю, але «докази» у вигляді чітких результатів зʼявилися тільки зараз). Більшість з цього часу ми працювали над одним продуктом, який виростили…
На жаль піти на свята з відчуттям відсутності незакритих питань не вийшло все одно. Клієнт, якого я просив десять разів підготувати всі документи заздалегідь і якому я надіслав реліз-кандидат заздалегідь, декілька днів після фінального делівері мовчав, потім в останній день написав «I'll confirm the acceptance today» (замість просто «accepted, bro» — в чому сенс взагалі?!), а потім авжеж не написав, поставив авто-реплай та пішов у відпустку до середини січня 🤡

Врешті надвечір він-таки згадав, написав мені в зовсім інший імейл-тред, мовляв, ось тобі підписаний delivery protocol, та прикріпив до листа старий файл за жовтень 🤡🤦

Повнісінька зневага до праці інших людей. Не робіть так.
Please open Telegram to view this post
VIEW IN TELEGRAM
👀1
Щойно дізнався від другана, що 1 січня 2024 року помер Ніклаус Вірт — автор мов програмування Pascal, Modula, Oberon, книги «Algorithms + Data Structures = Programs» тощо. Чувак мав величезний вплив на світ компʼютерів — наш з вами світ — за що я його дуже поважаю.

Я памʼятаю, як із задоволенням переходив з Pascal на C, бо «останній більш популярний», «бо ним користуються професіонали», бо «він значно лаконічніший». Мені знадобилося майже 15 років, щоб усвідомити, що як раз-то на паскалі писати було значно приємніше, адже можна було просто дампати думки в код, а потім, що важливо, приблизно так само відновлювати думки з коду.

В той самий час код на C та багатьох його нащадках — це завжди челендж при написанні + челендж при читанні. Не прикольно ж написати щось по-людськи, значно цікавіше, коли
while (*d++ = *s++);

еге ж? Така собі жуйка для мозку. Коли бізнес-задачі нудні, треба знаходити собі джерело дофаміну.

От і виходить, що довгий час індустрія розвивалася коштом позерів (типу мене), які на рівному місці вигадували собі проблеми, а потім героїчно їх вирішували. Навіть жарт був, памʼятаю: «те, що було насилу написане, і читатися мусить насилу». Згодом, щоправда, виявилося, що це не зовсім і жарт для багатьох.

Отож, пане Вірте, ми все проїбали. Принаймні в боротьбі зі складністю.

До речі, є навіть так званий закон Вірта, згідно з яким
Софт стає повільнішим жвавіше, ніж залізо стає швидшим.

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

Але не переймайтеся, часи порівнянь C та Pascal позаду. Нині складність з мов програмування перейшла на рівень вище — на рівень архітектури, фреймворків, систем, сервісів, кластерів та клаудів. Тепер заживемо ☺️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7😢3
Cіпласпластик
Щойно дізнався від другана, що 1 січня 2024 року помер Ніклаус Вірт — автор мов програмування Pascal, Modula, Oberon, книги «Algorithms + Data Structures = Programs» тощо. Чувак мав величезний вплив на світ компʼютерів — наш з вами світ — за що я його дуже…
А знаєте до речі, як так вийшло, що C# як мова значно приємніша за C++? Та бо її автором є Андерс Гейлсберґ, який за сумісництвом також є автором Turbo Pascal (ну й фактично Delphi також згодом). Просто хлопак щось тямить в зручних та приємних мовах програмування.

TypeScript теж його. Так-так, все одна й та сама людина. Чим він наразі займається хз, але до 2020-го активно котрибʼютив саме в TS.
👍51
Cіпласпластик
Я вже якось згадував, що почав користуватись Warp як терміналом на macOS. Вирішив його спробувати, бо сподобалася (читайте — зійшлася з моєю) ідея блоків: фактично він просто групує команду з її аутпутом, що, втім, доволі зручно. Проте я ніяк не міг позбутися…
Хотів, було, розповісти вам, як я успішно перейшов з #zsh остаточно на #fish пару тижнів тому, бо останній значно прикольніший: більш людяний синтаксис, легший для сприйняття, ну й в цілому цікавий чи що. Проте на fish я надовго не затримався, бо виявилося, що є ще крутіші альтернативи. Навіть трохи шкода 😢

Колись давно я дізнався про #PowerShell від Microsoft і був до глибини душі вражений, що вони реалізували передачу структурованих обʼєктів замість тексту через пайп, адже і сам мріяв про таке давно 🙂 Але з павершелом врешті не зайшло, хоча я навіть книгу прочитав. Не тому, що він поганий абощо — ні, він навпаки чудовий, а ті, хто стверджує протилежне, просто жодного разу ним не користувалися, мабуть. Мені, наприклад, дуже подобається їх схема імен а ля Verb-Noun. Не дуже лаконічно, зате зрозуміло. Але в якийсь момент я відчув, що для ефективного використання треба глибше пірнати в .NET, а мені воно було не в тему. Та годі про PowerShell.

Я натрапив на Nushell! Він також передає структуровану інформацію через пайп, але є й інші цікавинки. Наприклад, змінні там по дефолту immutable, що спонукає писати в більш функціональному стилі. Загалом відчувається якась атмосфера Haskell трохи. Синтаксис лямбд при цьому скоріше як в Ruby. Іще цей шел не POSIX-сумісний, що безперечно є додатковою перевагою 😉 Окремо варто згадати, що він не інтерпретує вирази, а компілює: з перевіркою типів, нормальними повідомленнями про помилки — з усіма ніштяками отже.

Той факт, що через пайпи передаються структуровані дані, наприклад той же JSON, також означає, що потенційно нарешті не потрібен jq. Я тут щойно погрався і за пару хвилин зміг порахувати кількість рядків коду та ін., що ми написали в останньому тримісячному проєкті:
> let excludes = [**/3rdparty/** **/node_modules/**]
> glob **/*.{cpp,hpp,qml,js} --exclude $excludes | each { |f|
open $f | str stats
} | math sum
╭───────────┬────────╮
│ lines │ 22169 │
│ words │ 44291 │
│ bytes │ 516740 │
│ chars │ 516714 │
│ graphemes │ 516714 │
╰───────────┴────────╯

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

Спробую пожити з #Nushell як з дефолтним, бо цікава штука.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1👀1