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

Мої емоджі:
https://t.me/addemoji/AdaptiveDevIcons
https://t.me/addemoji/VehicleBrands
Download Telegram
Зараз буде багато тексту.

Вчора раптом отримав інсайт щодо код-ревʼю, коли мені робили дизайн-ревʼю слайдів для презентації.

Я вже писав про це раніше, але передісторія така:
Робив програмістам-плюсовикам на роботі доповідь під назвою «Want to get better at C++? Learn other languages». Ну, не скажу, що ідея капець яка свіжа, але це те, в що я сам вірю: доволі складнувато, якщо взагалі можливо, стати професійним програмістом, коли ти нічого окрім C++ не бачив, бо знання мови хоч і важливе, але точно не на першому і навіть не на другому місці за пріоритетом. А серед плюсистів воно ж часто як: пишуть на плюсах, можливо навіть бачили Python, який зневажають, а решту взагалі ігнорують.

Потім треба було мені зробити пʼятихвилинний lightning talk вже на ширшу аудиторію, де і різних програмістів більше, та й інші тестувальники та ПМи присутні. Але моя тема масштабується на будь-що насправді, бо я особисто постійно вбачаю паралелі у всьому та намагаюся використовувати всі свої знання з різних сфер.

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

А тут контора вирішила зробити публічне ревʼю презентацій від охочих. Я звісно одразу зголосився, бо люблю отримувати фідбек. І от дизайнерка сиділа та коментувала різні помилки та можливості покращити.

Наведу декілька прикладів своїх слайдів та коментарів на них:
👀1
Занадто величезний шрифт. Презентація аж «кричить».

(У мене в принципі в презентації всюди великий).

Я поставив тут будильник на слайд, бо він і в списку є, і взагалі доволі лаконічна та впізнавана штука.
👀1
Це картина якась, — каже. — Не підходить по стилю до будильника. Треба прибрати й вставити щось ліпше.
(Будильник, до речі, в презентації насправді на декілька слайдів пізніше поточного, тож ще питання, що до чого не підходить).
1👀1
Аніме… ми в компанії не використовуємо аніме… Краще прибрати й використати щось більш підхоже.

(Я опущу те, як у мене підгоріла дупця з «аніме»).

Але… що саме тут пасуватиме краще, ніж персонаж з мультфільму, який є автором цих слів? Цитата ж буквально двічі доводить правильність того, про що я розповідаю в презентації. По-перше, напряму: сам сенс цитати про це. А по-друге, на метарівні: мені треба було зробити слайди під презентацію, я не знав, що туди писати, а потім раптом збагнув, коли займався зовсім іншою справою — дивився «Аватара» 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
😁62👀1
Отож про що це я? А, ну так, про дизайн-ревʼю та про код-ревʼю.

Річ у тім, що у нас в компанії є шаблон для презентацій. Це, можна сказати, такий собі style guide, як у програмістів для коду.

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

І я абсолютно згоден з аналізом, але не згоден з висновками. Мені навпаки цікаво, чому в нашому шаблоні шрифт такий маленький за стандартом? Це ж спонукає людей писати занадто багато тексту або пхати нерелевантні зображення, щоб заповнити пустоти. При цьому дослідження ясно показують, що коли людям треба одночасно й читати багато тексту, і слухати доповідача, то вони обирають перше (а нащо тоді доповідач?).

Всі мої зображення були додані, щоб підкреслити якусь думку, а не тому, що було забагато вільного місця.

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

Я отримав й кілька вельми корисних порад звісно! Але загалом дизайнерка була настільки збентежена великим шрифтом, що не помітила інших «жахливих» порушень нашого стайл-гайду: що у мене взагалі немає bullet-списків, що на жодному слайді немає номера сторінки, назви компанії, копірайту, сьогоднішньої дати та іншого булшиту, який зазвичай пхають, що на жодному слайді, окрім першого та останнього, немає логотипа компанії, тощо. І що шрифт заголовка слайда менше за розміром, ніж шрифт змісту 😁 (але виділений кольором).

Я розмірковував про все це, і раптом збагнув, що воно якось дуже відлунює мені код-ревʼю, до якого ми всі з вами звикли. В різних компаніях практика огляду коду також дуже відрізняється: від перевірки пробілів/табів до того, що хтось качає собі PR та перевіряє, чи коректно він працює.

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

Чи є сенс в рамках ревʼю чекаутити собі код та запускати його? Ну, точно не щоразу. Я інколи це роблю для особливо критичних місць, але чисто тому, що частково виконую роль архітектора також, й буває чуйка підказує, що «щось тут не те».

Чи є користь від перегляду коду, не пірнаючи в контекст та не намагаючись зрозуміти логіку? Ну, дивлячись на те, як було зроблене дизайн-ревʼю — ні. Ба більше! Це може навіть зашкодити.

На жаль у мене немає остаточно сформованої думки з цього приводу. Але я вкотре здивувався, як якась одна подія спровокувала роздуми на іншу, відносно далеку тему 🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👀1
Щойно дізнався від @dmytrish про таку крутецьку штуку як Kaitai Struct. Це декларативний парсер бінарних даних, який вміє генерувати код під різні мови, зокрема для C++ (а не C! 😌).

Мені буквально нещодавно треба було запарсити віндовий ico-формат в JavaScriptʼі, й у npmʼі авжеж є якісь готові ліби, але в тому середовищі, під яке я писав, дуже старий JS-рантайм (ECMAScript 5). Вручну все писати також впадлу.

А Kaitai, схоже, генерує код під ES5 як раз, бо я не побачив там якогось свіжішого синтаксису. Доведеться знов дістати ту ініціативу зі скрині відкладених проєктів.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1👀1
Кому #ШІ-шку прям в телеграмі? Microsoft розробила офіційний телеграм бот для Copilot: так і називається, їй-богу — @CopilotOfficialBot. Якось працює, навіть доволі непогано, хоча просить номер телефона з ними зашарити.

Мене вразило не стільки те, що до телеграму прикрутили ШІ-шку у вигляді бота (бо самописних на ґітгабі вистачало й до того), скільки той факт, що Microsoft написала щось для Telegram.

Це як акт визнання існування останнього великими компаніями. Тобто серйозні справи вже пішли, серйозна гра. А значить, надалі ставатиме тільки гірше 🙂 — час шукати, куди звідси ливати 🧐
Please open Telegram to view this post
VIEW IN TELEGRAM
👏5👍2👀1
Media is too big
VIEW IN TELEGRAM
Мені трапився черговий «веббраузер»(?) — Kosmik. Цього разу маємо безкінечне полотно, на яке можна пхати різні зображення, PDF-ки, посилання, текст, наліпки тощо. Тобто в принципі те саме, що вже 20 років є у OneNote, тільки вебкліпер раніше був у браузері, а тепер навпаки браузер вбудований у програму. Хоча сама програма на електроні — тож теж браузер. А ще її можна запустити всередині звичайного браузера 😵‍💫 Kosmik ще й не зовсім безплатний до того ж.

Я потикався і бачу, що користуватися не буду, але сюди вирішив скинути. Тиждень був важкий, а я давно сюди нічого не писав — ще відписуватися почнете 🙁
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁4🤔1😱1
Намагаюся частіше використовувати фічі останніх стандартів C++, зокрема ranges. Тож у мене доволі багацько коду на кшталт такого:
return mimeData->formats() | views::transform(toMimeSlice) | to<Clip::MimeContainer>();

Але рядок швидко стає немаленьким завширшки, особливо з плюсовим синтаксисом, як ви можете собі уявити. А clang-format форматує код отак:
return mimeData->formats() | 
views::transform(toMimeSlice) |
to<Clip::MimeContainer>();

Тобто пайп ставить в кінці рядка, а наступний рядок починає під початком першого слова у виразі. Тут для краси toMimeSlice просто як функція передається, але насправді там могла бути лямбда на декілька рядків, і це зовсім неможливо стає читати.

Для clang-format | — це просто бінарний оператор. Можна, мабуть, налаштувати, щоб він у довгих виразах починав рядок з нього, але тоді він це буде робити і для якогось +, а мені так не подобається.

Дратувало мене це — просто жах, але як так налаштувати його, щоб у мене око не тіпалося — хз. Вирішив спитати #ШІ, бо думав, може, пропустив якесь спеціальне налаштування на цей випадок. А ШІ-шка мені: «так ти просто коментар порожній в кінці рядка лишай» 🤯
return mimeData->formats()            //
| views::transform(toMimeSlice) //
| to<Clip::MimeContainer>();

Тепер clang-format бачить, що між операндом та пайпом ще токен коментаря стоїть, і йому доводиться писати пайп з нового рядка )

Так, ШІ-шка цьому десь навчилася теж, але я сам щось не допетрав до такого рішення.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3😁1😭1🙈1
Сьогодні компілятор мене тролить. Пишу, знач, у себе в коді:
QHash<int, QByteArray> roles = sourceModel() ? sourceModel()->roleNames() : {};

А він мені:
PaddingProxyModel.cpp:695:76: error: initializer list cannot be used on the right hand side of operator ':'
QHash<int, QByteArray> roles = sourceModel() ? sourceModel()->roleNames() : {};
^ ~~

«Не можу», — каже, — «справа від : поставити {}». Ну ок, спробуймо зліва!
QHash<int, QByteArray> roles = !sourceModel()? {} : sourceModel()->roleNames();

А він у відповідь:
PaddingProxyModel.cpp:695:49: error: initializer list cannot be used on the right hand side of operator '?'
QHash<int, QByteArray> roles = !sourceModel()? {} : sourceModel()->roleNames();
^~

Короч, зліва теж не можна. Чого одразу не сказати щось на кшталт «не пиши initializer list в тернарніку»‽ Як у тому анекдоті про програмістів — максимально точна відповідь, яка, втім, не несе жодної користі.
2😁2
This media is not supported in your browser
VIEW IN TELEGRAM
Зацініть мою знахідку: черговий клієнт для #Gitdebase!

Цього разу це не просто #CLI чи прога з ненависним графічним інтерфейсом. Цього разу це #TUI, тож взяли все ваше найулюбленіше з обох підходів: неможливість показувати нормальну деталізовану графіку + необхідність користуватися мишкою 🤡 План надійний, як швейцарський годинник.

Втім виглядає симпатично )
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6😁6🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
Ну добре, а тепер вже без жартів корисна #TUI-прога, яку я років пʼять назад знайшов — pgcli. Це REPL для Postgres з автодоповненням та табличками.

З цікавого: виявилося, що основна розробниця — родом з Харкова!

А взагалі ця прога є частиною більшої організації, в якій є подібні #тулзи під різні бази даних: https://www.dbcli.com.

До речі хороших і при цьому безплатних GUI-аналогів я може і не знаю навіть. Якщо вам спадає щось на думку, закидайте мене посиланнями, плз.
🔥11👍4
Cіпласпластик
Отож про що це я? А, ну так, про дизайн-ревʼю та про код-ревʼю. Річ у тім, що у нас в компанії є шаблон для презентацій. Це, можна сказати, такий собі style guide, як у програмістів для коду. І в цьому шаблоні шрифт доволі маленький, а я у своїх слайдах…
До речі щодо ютубу. Готуючи свою презентацію, я покладався зокрема на ось цю чудову лекцію від професора Патріка Вінстона з MIT (який на жаль помер пʼять років тому, як я щойно дізнався 😢). Дивовижний приклад того, як чувак, розмовляючи доволі помірно й тихо, все одно зумів захопити мою увагу на цілу годину (хоча зазвичай у мене вже за пʼять хвилин починає дупа зудіти від нудьги). Я це відео вже двічі дивився навіть.

Зокрема, його рекомендації з оформлення слайдів для доповіді мені здалися вельми логічними, тож я їх прийняв для себе також, про що вже згадував раніше.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Натрапив на вправи для вивчення #Zig, в яких треба фіксити поламаний код. Доволі цікавий підхід для знайомства з мовою.
6👍3
Я не фанат, але на сьогоднішній конфі Xbox (яка була найпотужнішою за весь Summer Game Fest) показали трейлер S.T.A.L.K.E.R. 2 українською! 🫶 Дякую GSC Game World за те, що це зробили, та Microsoft за те, що підтримали.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥95
Як і очікувалося, електричний скутер #Honda Motocompacto, про який я вже писав, виявився вельми сумнівним.

Але цей допис — скоріш рекомендація каналу FortNine, які роблять дуже якісні в плані постановки відео на тему мотоциклів та деякі суміжні. Гляньте, доки робочий тиждень тільки-но розпочинається )
👀1🦄1
Трохи про доведення справ до кінця.

Я вже якось згадував, що покладаюся на три тести для оцінки себе. Про один (від компанії Рея Даліо) я написав ще тоді, а зараз зʼявився привід згадати ще один: 16personalities. Насправді це безплатна і трохи простіша версія тесту Маєрс-Бріґс (на який Рей Даліо теж посилався), розробленого дочкою-психологинею та її матірʼю під натхненням від книги Карла Юнґа «Психологічні типи».

Тест дає на диво точні результати, але мова не про те. Я проходив його тричі: у 2018, 2020 та 2023. І перші два рази отримував INTP-A профіль, який вони називають Assertive Logician. А ось останній раз показники незначним чином змінилися, і я «став» ISTP-A, або Assertive Virtuoso. Головна зміна відбулася в другому параметрі, як можна побачити по літерах, тобто на шкалі від N (iNtuition) до S (obServation or Sensing). У 2018 я начебто покладався на інтуїцію на 67%, у 2020 — лише на 52%, а у 2023 всього на 48% (тобто тепер став на 52% спостережливим 🧐).

Все це схоже на маячню, проте я зауважив, що приблизно в той самий час я став доводити до кінця деякі свої ініціативи: почав і дописав невеличку бібліотеку для QML разом з детальною документацією, якісь там модулі десь, трохи поконтрібʼютив в опенсорс… та навіть полички в хаті понавішував!

А днями трапився відос, де чувак проводить паралель між тим, як ми граємо в ігри та як робимо все інше в житті, на що його своєю чергою наштовхнула фраза з «Джона Віка», що звучить як
«How you do anything is how you do everything»
(сама фраза походить чи то з дзен-буддизму, чи хтозна-звідки ще).

Поміркувавши, я зрозумів, що мій підхід до ігор завжди був приблизно такий: раз в ніколи я сідаю за компʼютерну гру, граю в неї майже цілодобово, і десь годин за 30–35 мене відвертає. Тож якщо гра коротка, я її встигаю пройти, а якщо ні, то просто кидаю. Цікаво, що свої пет-проєкти я зазвичай робив так само!

Аналізуючи далі, я збагнув, що схожий підхід у мене був також в універі: я цілий семестр розслаблявся, а потім рвав дупу, щоб закрити сесію за пару тижнів. (Я гроші не платив, тож окремим челенджем завжди було домовитися з викладачем про хоча б дозвіл на те, щоб здати всі лаби, практичні завдання тощо).

Але так було не завжди. Ще раніше я вчився у коледжі, а до того у школі. У мене завжди була гарна памʼять і швидкий мозок, тож я не мав значних складнощів з програмою навчання. Відмінність же була у тому, що я вчився регулярніше і більш поступово. Але в якийсь момент став покладатися на швидку памʼять занадто сильно.

Back to present day. Я пройшов свою нині улюблену гру Mass Effect (200 годин), я пройшов Baldur's Gate 3 (300 годин), у мене є як робочі, так і особисті ініціативи та проєкти, які хоч і неквапливо, але все ж просуваються впродовж доволі тривалого часу. Всі ці штуки поєднує той факт, що я більше не намагаюся подолати їх ривком — натомість я спокійно планую, а потім крок за кроком виконую.

Якщо я вам просто скажу: «start small, stay consistent» — це не допоможе. Тобто звісно саме так робити і треба, але… як себе змусити?

Моїми найголовнішими блокерами були: 1) відсутність відчуття, коли вже час спинитися (щоб не набридло завчасно) та 2) нездатність змусити себе зробити ще одну ітерацію (бо вже встигло остогиднути на попередній). Іншим аспектом була деяка моя ідеалістичність, яка сильно заважала, але на щастя поволі перетворюється на прагматичність, про що свідчить згаданий вище тест. Ну і ще купа чого.

Отож, підсумки не підбиваю. Кидайте свої результати тестів у коментарі.
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥2👀1