05.05.202509:14
Сьогодні короткий дайджест новин щодо мов програмування, які трапилися мені на очі за останній місяць.
У Python 💻 десь в районі версії 3.6 додали так звані f-рядки з інлайн-інтерполяцією:
Дуже зручно. Хоча знаходяться унікуми, що використовують їх тупо для усього, зокрема для формування запитів до БД з включенням шматків, що прийшли від користувачів — привіт, SQL-інʼєкції.
Fear no more: до 3.14 вирішили додати t-рядки! Літерали на вигляд такі самі, але насправді це не
Нащо це все? Власне, саме для того, щоб не отримувати на вихід готовий рядок. Натомість ви отримуєте купу статичних шматків рядка + низку інтерполяцій і можете з ними щось зробити до формування фінального
Для останнього, до речі, багацько років (на доволі високому Stage 2) висіла пропозиція від типців з Блумберга додати в мову «глибоко незмінні структури даних» —
У спільноті 💻 тим часом ТРАГЕДІЯ! Компанія AdaCore провела презентацію нових фічей в їхньому компіляторі GNAT Pro, де зокрема розповіла, що додала до мови ООП-класи (а ще підтримку Rust, але то інша історія). Взагалі-то в Ada і до того ООП давно було (з 1995), але реалізувалося через так звані теґовані типи:
Тут процедури, що обʼявлені в тому ж скоупі й приймають першим параметром відповідний тип, стають фактично «методами». Однак для тих, хто прийшов з, боже збав, C++ та інших схожих мов, такий підхід був невтямки. Тому віднині можна буде створювати класи отак:
Зʼявилося ключове слово
Прикол же тут глибше на ділі. Ada — це ISO-стандарт, тож мова нікому не належить. Але єдиний живий компілятор GNAT підтримується компанією AdaCore, тому 99% штук, які зʼявляються там, врешті потрапляють до стандарту. Такі справи.
Ну й трохи про ліспи. Нещодавно я вже розповідав про Janet 👩🦰 — мову, дуже схожу на Clojure 💻, яка компілиться в сішку. Взагалі кложа наче друге дихання ліспам відкрила, бо вона проста, елегантна й прикольна. Якби ж ще не JVM поперек горла… Якось так подумали й автори Janet у свій час. А з ними автори ще мінімум штук пʼяти інших варіацій, і це тільки ті, що мені траплялися.
Однією з таких варіацій є Jank, яка вже на C++ базується, а не на сішці. Так-от вони днями анонсували «безшовний інтероп» з плюсами, тобто можливість прямо з джанка створювати й працювати з плюсовими обʼєктами. Скажу чесно, я зацікавився 🤤 Прямий плюсовий інтероп (не через C) — це одна з фічей, яка раніше мене зацікавила у Swift 🕊. Якщо у цього ліспа щось таке вийде, то я навіть готовий почати називати їх не джанк, а дженк.
Може ще щось цікаве було, та зараз вже не згадаю. Тож наразі все.
У Python 💻 десь в районі версії 3.6 додали так звані f-рядки з інлайн-інтерполяцією:
f"a + b = {a + b}"
Дуже зручно. Хоча знаходяться унікуми, що використовують їх тупо для усього, зокрема для формування запитів до БД з включенням шматків, що прийшли від користувачів — привіт, SQL-інʼєкції.
Fear no more: до 3.14 вирішили додати t-рядки! Літерали на вигляд такі самі, але насправді це не
str
, а string.templatelib.Template
:template = t"a + b = {a + b}"
Нащо це все? Власне, саме для того, щоб не отримувати на вихід готовий рядок. Натомість ви отримуєте купу статичних шматків рядка + низку інтерполяцій і можете з ними щось зробити до формування фінального
str
(наприклад, екранувати потенційно небезпечне). Фактично, це ті ж шаблонні рядки, які вже є в 💻.Для останнього, до речі, багацько років (на доволі високому Stage 2) висіла пропозиція від типців з Блумберга додати в мову «глибоко незмінні структури даних» —
Record
і Tuple
. Нагадую, що зараз в 💻 є тільки вельми мінливі Object
і Array
. Якщо ви мріяли про value types у джаваскрипті, то годі — декілька тижнів тому пропозицію скасували, бо домовитися не змогли, зацікавлених виявилося не так і багато тощо.У спільноті 💻 тим часом ТРАГЕДІЯ! Компанія AdaCore провела презентацію нових фічей в їхньому компіляторі GNAT Pro, де зокрема розповіла, що додала до мови ООП-класи (а ще підтримку Rust, але то інша історія). Взагалі-то в Ada і до того ООП давно було (з 1995), але реалізувалося через так звані теґовані типи:
package Example is
Тут процедури, що обʼявлені в тому ж скоупі й приймають першим параметром відповідний тип, стають фактично «методами». Однак для тих, хто прийшов з, боже збав, C++ та інших схожих мов, такий підхід був невтямки. Тому віднині можна буде створювати класи отак:
package Example is
Зʼявилося ключове слово
class
, методи оголошуються прямо всередині відповідного блока, також можна private
зробити прям там же. Багатьом це прийшлося не до вподоби, мені включно. Особисто я просто не бачу в цьому сенсу, бо й до того було збс.Прикол же тут глибше на ділі. Ada — це ISO-стандарт, тож мова нікому не належить. Але єдиний живий компілятор GNAT підтримується компанією AdaCore, тому 99% штук, які зʼявляються там, врешті потрапляють до стандарту. Такі справи.
Ну й трохи про ліспи. Нещодавно я вже розповідав про Janet 👩🦰 — мову, дуже схожу на Clojure 💻, яка компілиться в сішку. Взагалі кложа наче друге дихання ліспам відкрила, бо вона проста, елегантна й прикольна. Якби ж ще не JVM поперек горла… Якось так подумали й автори Janet у свій час. А з ними автори ще мінімум штук пʼяти інших варіацій, і це тільки ті, що мені траплялися.
Однією з таких варіацій є Jank, яка вже на C++ базується, а не на сішці. Так-от вони днями анонсували «безшовний інтероп» з плюсами, тобто можливість прямо з джанка створювати й працювати з плюсовими обʼєктами. Скажу чесно, я зацікавився 🤤 Прямий плюсовий інтероп (не через C) — це одна з фічей, яка раніше мене зацікавила у Swift 🕊. Якщо у цього ліспа щось таке вийде, то я навіть готовий почати називати їх не джанк, а дженк.
Може ще щось цікаве було, та зараз вже не згадаю. Тож наразі все.
16.04.202514:59
Короч, головний ауткам:
Бьярне каже, що його нині трохи дратує, наскільки повільно рухається комітет стандартизації 💻. (Останній раз, коли він рахував, там було 527 членів 🤯). І якби він міг повернути минуле, то докладав би значно більше зусиль, щоб уникнути такої моделі управління й натомість розвивати мову групою в 6–7 людей. Водночас вважає, що шанси були примарні.
Ще пан Стауструп скаржиться на хаос, утворений сотнями різних налаштувань в сучасних компіляторах під різні платформи. Каже, що це теж через ISO, бо ті займаються стандартизацією мови, але не тулінга.
А ще відзначив, що Rust — не та мова, яка покладе край 💻.
(Хотів запитати його, як добре він знає C++ від 1 до 10 і які інші мови йому подобаються — шкода, що не встиг).
Бьярне каже, що його нині трохи дратує, наскільки повільно рухається комітет стандартизації 💻. (Останній раз, коли він рахував, там було 527 членів 🤯). І якби він міг повернути минуле, то докладав би значно більше зусиль, щоб уникнути такої моделі управління й натомість розвивати мову групою в 6–7 людей. Водночас вважає, що шанси були примарні.
Ще пан Стауструп скаржиться на хаос, утворений сотнями різних налаштувань в сучасних компіляторах під різні платформи. Каже, що це теж через ISO, бо ті займаються стандартизацією мови, але не тулінга.
А ще відзначив, що Rust — не та мова, яка покладе край 💻.
(Хотів запитати його, як добре він знає C++ від 1 до 10 і які інші мови йому подобаються — шкода, що не встиг).


26.03.202510:17
Дослухав днями книжку «The Culture Map» (слухав англійською в Audible, але у «Нашого Формату» є переклад українською — «Культурна карта»). Раніше вже стикався з темою культурних барʼєрів, що можуть виникати при розширенні бізнесу на інші країни, коли читав книжку «No Rules Rules» про корпоративну культуру Netflix. Воно й не дивно, адже Ерін Меєр була їхньою консультанткою саме з цих питань, а потім власне стала соавторкою книги разом з нетфліксовським CEO.
Загалом отримав задоволення. Основна думка там полягає в тому, що ми (та й решта) як носії власної культури не надто звертаємо увагу на її особливості: для нас це норма, яку ми несвідомо намагаємося застосувати до будь-кого, з ким контактуємо. Але насправді всі геть різні 🙂
Ерін виокремила 8 основних аспектів, за якими порівнює різні культури: спілкування (наскільки багато інформації передається неявно «через контекст»), надання негативного відгуку (прямо чи непрямо), переконання (починаючи з деталей і до узагальнення чи навпаки від загальних концептів до прикладів), лідерство (егалітарне чи ієрархічне), прийняття рішень (зверху вниз чи консенсусне), довіра («за дії» чи через взаємини), вираження незгоди (з конфронтацією чи навпаки уникаючи її) і планування (з лінійним сприйняттям часу чи «гнучким» гг). Певен, що в українському перекладі якось краще все це назвали, ніж я щойно переклав.
Важливий момент, що давати оцінку для кожного з цих параметрів «у вакуумі» доволі без понту. Кажуть, нібито німці доволі прямолінійні, але я як українець не дуже це на собі відчуваю, бо ми теж не промах, а от японцю буде важкувато. Іншими словами, треба саме порівнювати культури: тоді можна буде сказати, що «оті прямолінійніші за інших». Ну й звісно, що кожна з характеристик — це не точка, а діапазон.
Очевидно, що культурні особливості зумовлені історично, але цікаво розуміти, як саме. Наприклад, у японців при спілкуванні багато інфи йде між рядків — ну, бо вони на островах більш-менш відокремлено живуть, і навчилися розуміти один одного з півслова. А ті ж американці навпаки мають майже нульовий контекст, бо туди понаїхали аби хто, і в разі непорозуміння могли підстрелити. У них того й гумор такий буквальний, навіть після жарту додають «I'm kidding» 😑, щоб уже сумнівів не лишилося.
Або інший приклад. Ось в Україні, особливо в державних установах, треба писати свої ПІБ — прізвище, імʼя та по-батькові. Нам ще в школі вчителька казала, що це росіянська хуйня, яка для українців не була характерна. Тут прикол у тому, що «прізвище» aka family name — на першому місці. Ну й імʼя батька ще нахуя-то додають. І це прям дуже азійська тема, бо це в них там суспільство вельми ієрархічне, а родина завжди важливіша за особистість. У західній культурі зазвичай навпаки: спочатку імʼя (особистість), а далі прізвище (належність до групи). Отож я щось не пригадую, щоб казали «Хмельницький Богдан Михайлович». Мазепа Іван? Сковорода Григорій? Ну, ви зрозуміли )
Інше кумедне спостережння: ставлення до часу впливає на формування черги в магазинах, установах тощо. Культури з лінійним сприйняттям формують нормальну прям у чергу, а культури з гнучким (як наша) — це тупо абишо 😅, бо починається з однієї людини, але швидко йде вшир.
В книзі повно інших історій, прикладів і порад. Мені сподобалася, тому й вам раджу ✍️
Загалом отримав задоволення. Основна думка там полягає в тому, що ми (та й решта) як носії власної культури не надто звертаємо увагу на її особливості: для нас це норма, яку ми несвідомо намагаємося застосувати до будь-кого, з ким контактуємо. Але насправді всі геть різні 🙂
Ерін виокремила 8 основних аспектів, за якими порівнює різні культури: спілкування (наскільки багато інформації передається неявно «через контекст»), надання негативного відгуку (прямо чи непрямо), переконання (починаючи з деталей і до узагальнення чи навпаки від загальних концептів до прикладів), лідерство (егалітарне чи ієрархічне), прийняття рішень (зверху вниз чи консенсусне), довіра («за дії» чи через взаємини), вираження незгоди (з конфронтацією чи навпаки уникаючи її) і планування (з лінійним сприйняттям часу чи «гнучким» гг). Певен, що в українському перекладі якось краще все це назвали, ніж я щойно переклав.
Важливий момент, що давати оцінку для кожного з цих параметрів «у вакуумі» доволі без понту. Кажуть, нібито німці доволі прямолінійні, але я як українець не дуже це на собі відчуваю, бо ми теж не промах, а от японцю буде важкувато. Іншими словами, треба саме порівнювати культури: тоді можна буде сказати, що «оті прямолінійніші за інших». Ну й звісно, що кожна з характеристик — це не точка, а діапазон.
Очевидно, що культурні особливості зумовлені історично, але цікаво розуміти, як саме. Наприклад, у японців при спілкуванні багато інфи йде між рядків — ну, бо вони на островах більш-менш відокремлено живуть, і навчилися розуміти один одного з півслова. А ті ж американці навпаки мають майже нульовий контекст, бо туди понаїхали аби хто, і в разі непорозуміння могли підстрелити. У них того й гумор такий буквальний, навіть після жарту додають «I'm kidding» 😑, щоб уже сумнівів не лишилося.
Або інший приклад. Ось в Україні, особливо в державних установах, треба писати свої ПІБ — прізвище, імʼя та по-батькові. Нам ще в школі вчителька казала, що це росіянська хуйня, яка для українців не була характерна. Тут прикол у тому, що «прізвище» aka family name — на першому місці. Ну й імʼя батька ще нахуя-то додають. І це прям дуже азійська тема, бо це в них там суспільство вельми ієрархічне, а родина завжди важливіша за особистість. У західній культурі зазвичай навпаки: спочатку імʼя (особистість), а далі прізвище (належність до групи). Отож я щось не пригадую, щоб казали «Хмельницький Богдан Михайлович». Мазепа Іван? Сковорода Григорій? Ну, ви зрозуміли )
Інше кумедне спостережння: ставлення до часу впливає на формування черги в магазинах, установах тощо. Культури з лінійним сприйняттям формують нормальну прям у чергу, а культури з гнучким (як наша) — це тупо абишо 😅, бо починається з однієї людини, але швидко йде вшир.
В книзі повно інших історій, прикладів і порад. Мені сподобалася, тому й вам раджу ✍️
19.03.202511:20
Спробував так званий Edit Mode у GitHub Copilot. Це коли ви кажете ШІ-шці, мовляв, зараз працюватиму ось з цими файлами, а далі пишете їй, що треба зробити, а воно редагує. Таке собі парне програмування.
Я трохи не втямлюю, нащо під це було окремий режим робити й чому воно відрізняється від Chat, але ось так.
Попросив його винести декілька функцій в окрему лібу. Він чогось виніс туди попередню реалізацію (яку я закоментив), а не чинну, по дорозі загубив деякі перевірки вхідних параметрів тощо.
З іншого боку було доволі легко відвʼязався від 💻-типів, замінивши на стандартні, плюс ще декілька дрібниць попросив.
Загалом вийшло нібито швидше, ніж повністю руками це робити, але перевіряти канєш треба. Дедалі більше стає схожим на кіберджуна 😂
Я трохи не втямлюю, нащо під це було окремий режим робити й чому воно відрізняється від Chat, але ось так.
Попросив його винести декілька функцій в окрему лібу. Він чогось виніс туди попередню реалізацію (яку я закоментив), а не чинну, по дорозі загубив деякі перевірки вхідних параметрів тощо.
З іншого боку було доволі легко відвʼязався від 💻-типів, замінивши на стандартні, плюс ще декілька дрібниць попросив.
Загалом вийшло нібито швидше, ніж повністю руками це робити, але перевіряти канєш треба. Дедалі більше стає схожим на кіберджуна 😂
10.01.202513:27
тут хороша стаття від її сина
https://dou.ua/lenta/interviews/about-kateryna-yushchenko/
https://dou.ua/lenta/interviews/about-kateryna-yushchenko/
15.10.202410:06
Тримайте топовий інтерактивний(!) мануал з кривих Безьє.
Треба якось буде його українською перекласти. Але тексту там багацько.
Треба якось буде його українською перекласти. Але тексту там багацько.


03.05.202509:09
Пару тижнів тому дослухав «Start small, stay small» — книжку про мікропідприємництво (micropreneurship). І якщо чесно, мені не дуже зайшло попри деякі цікаві думки й низку досі корисних порад.
По-перше, не раджу аудіокнигу. Читає її сам автор, і зазвичай я полюбляю почути оригінал. Але цей настільки манірно це робить, що аж нудить. Таке враження, що тренується перед дзеркалом зніматися у вестернах чи в бондіані. А ще я багато кого слухаю десь на 1,2× швидкості, а цього довелося на 0,9× 😅 Окрім того, автор у своїй книжці лишив багато посилань на різні статті й ресурси. Зазвичай в таких випадках разом з аудіокнижкою просто йде маленька PDF-ка на додачу, але цей чувак буквально зачитує урли!!! (Не кажучи вже про те, що не всі з них досі валідні).
По-друге, Audible мене намахав, вказавши 2018 рік на книжці. Я нічого не підозрював аж до моменту, коли автор почав казати про сторінку в MySpace 🤫 І далі по тексту ще трохи розповідав про власні сумніви щодо того, що реклама в Twitter працюватиме. Виявилося, що книжка 2010 року, а в Audible потрапила у 18-му.
Ну, а по-третє, є в мене дойоби до змісту книжки.
На початку автор каже: «ця книжка не для тих, хто хоче створити новий фейсбук на мільярд користувачів. Вона для тих програмістів, хто хоче писати власний продукт і займатися тим, чим цікаво саме їм, працюючи на себе, а не „на дядю“ (і щоб при цьому на життя вистачало)» — окей, продано! Мене це цікавить!
І далі за текстом поступово зʼявляються такі твердження:
• Скоріш за все ваша ідея продукту — лайно. Натомість знайдіть собі якусь іншу життєздатну за оцими й оцими порадами.
• Програмування — це всього 30% успіху максимум. (З цим згоден). І не обовʼязково робити це самому. А краще взагалі зааутсорсити 😐
• Ну й все в такому дусі.
В мене тут постає питання: якщо врешті ідея не зовсім і моя, та й код пишу теж не я, то який мені як програмісту інтерес-то? Таке шось…
Очікував, що чувак розповість, як робити те, що подобається (програмувати), і отримувати за це гроші. А вийшло, що щоб отримувати гроші, треба, щоб почало подобатись інше 🙂
До речі, нагадує мені мій перехід на роботі з якогось типу техліда на чисто керівну роль. Це не миттєво трапилося звісно, але в якийсь момент довелося сісти й прийняти правду: займатися технічними питаннями без шкоди для інших своїх обовʼязків я більше не можу. І виконувати менеджерські задачі ефективно теж не можу, бо ніколи цьому не вчився. І коли змирився з цим, то далі якось прям краще й легше пішло.
По-перше, не раджу аудіокнигу. Читає її сам автор, і зазвичай я полюбляю почути оригінал. Але цей настільки манірно це робить, що аж нудить. Таке враження, що тренується перед дзеркалом зніматися у вестернах чи в бондіані. А ще я багато кого слухаю десь на 1,2× швидкості, а цього довелося на 0,9× 😅 Окрім того, автор у своїй книжці лишив багато посилань на різні статті й ресурси. Зазвичай в таких випадках разом з аудіокнижкою просто йде маленька PDF-ка на додачу, але цей чувак буквально зачитує урли!!! (Не кажучи вже про те, що не всі з них досі валідні).
По-друге, Audible мене намахав, вказавши 2018 рік на книжці. Я нічого не підозрював аж до моменту, коли автор почав казати про сторінку в MySpace 🤫 І далі по тексту ще трохи розповідав про власні сумніви щодо того, що реклама в Twitter працюватиме. Виявилося, що книжка 2010 року, а в Audible потрапила у 18-му.
Ну, а по-третє, є в мене дойоби до змісту книжки.
На початку автор каже: «ця книжка не для тих, хто хоче створити новий фейсбук на мільярд користувачів. Вона для тих програмістів, хто хоче писати власний продукт і займатися тим, чим цікаво саме їм, працюючи на себе, а не „на дядю“ (і щоб при цьому на життя вистачало)» — окей, продано! Мене це цікавить!
І далі за текстом поступово зʼявляються такі твердження:
• Скоріш за все ваша ідея продукту — лайно. Натомість знайдіть собі якусь іншу життєздатну за оцими й оцими порадами.
• Програмування — це всього 30% успіху максимум. (З цим згоден). І не обовʼязково робити це самому. А краще взагалі зааутсорсити 😐
• Ну й все в такому дусі.
В мене тут постає питання: якщо врешті ідея не зовсім і моя, та й код пишу теж не я, то який мені як програмісту інтерес-то? Таке шось…
Очікував, що чувак розповість, як робити те, що подобається (програмувати), і отримувати за це гроші. А вийшло, що щоб отримувати гроші, треба, щоб почало подобатись інше 🙂
До речі, нагадує мені мій перехід на роботі з якогось типу техліда на чисто керівну роль. Це не миттєво трапилося звісно, але в якийсь момент довелося сісти й прийняти правду: займатися технічними питаннями без шкоди для інших своїх обовʼязків я більше не можу. І виконувати менеджерські задачі ефективно теж не можу, бо ніколи цьому не вчився. І коли змирився з цим, то далі якось прям краще й легше пішло.
12.04.202512:13
Я дуже люблю різноманітні мови програмування — у першу чергу за можливість побачити якісь нові цікаві ідеї й додати їх до свого набору інструментів.
Проте в якусь мить досягаєш межі, за якою кількість нових ідей стає значно меншою, ніж час, необхідний для ознайомлення з особливостями мови. Іншими словами, всі мови приблизно однакові.
І, наприклад, саме завдяки цьому я зміг розв'язувати останній Advent of Code іншою мовою програмування щодня (хто не бачив, почитайте вище грудневі дописи, якщо цікаво). Хоча чимось дійсно новим для мене став тільки Prolog 🦉, від якого я в захваті.
А зараз подивився чудову доповідь про майже відсутню еволюцію в сучасних мовах програмування. Вражає, як купка людей, імена яких ви всі неодноразово чули, заклали фундамент на десятиріччя вперед.
Проте в якусь мить досягаєш межі, за якою кількість нових ідей стає значно меншою, ніж час, необхідний для ознайомлення з особливостями мови. Іншими словами, всі мови приблизно однакові.
І, наприклад, саме завдяки цьому я зміг розв'язувати останній Advent of Code іншою мовою програмування щодня (хто не бачив, почитайте вище грудневі дописи, якщо цікаво). Хоча чимось дійсно новим для мене став тільки Prolog 🦉, від якого я в захваті.
А зараз подивився чудову доповідь про майже відсутню еволюцію в сучасних мовах програмування. Вражає, як купка людей, імена яких ви всі неодноразово чули, заклали фундамент на десятиріччя вперед.


25.03.202512:49
Тупня, до речі, що якщо робиш реплай на допис в межах якогось короткого проміжку часу, то Телеграм не додає до нього можливість коментувати. Але й в коменти до попередного воно не потрапляє.
Я б очікував принаймні, що обидва дописи в один ланцюжок потрапляють, як на скріні нижче. А ще краще просто зняти обмеження на довжину повідомлення )
Я б очікував принаймні, що обидва дописи в один ланцюжок потрапляють, як на скріні нижче. А ще краще просто зняти обмеження на довжину повідомлення )
12.03.202510:16
Опа 💻
26.12.202411:14
Щоразу, як дивлюся або читаю пана Соловйова, хочеться спробувати Clojure, особливо на тлі незрозумілостей з Red.
Ліспи з їхньою купою варіацій і REBOL з наразі єдиним нащадком Red — це D&D 🎮 світу програмування. Є десяток базових правил, а далі все обмежується лише вашою фантазією (і спроможностями заліза гг). Обидва мають суперпростий синтаксис — можна навіть сказати, що ніякого синтаксису немає: ви просто пишете слова, а потім наділяєте їх власними значеннями. Звучить як казка.
Я вже намагався зробити підхід до Clojure десять років тому, але вочевидь був неготовий ментально. Зараз же зробив другу спробу і… не зміг себе пересилити: дивлюся в цей короткий лаконічний код, а подумки бачу, як JVM нестямно жере памʼять мого компа, і уявляю, як мені доведеться йти крізь ієрархію тек, щоб нарешті знайти там свій єдиний файл з кодом.
На щастя з одного зі стрімів пана Соловйова я дізнався про існування мови Janet 👩🦰 — дуже схожого на кложу діалекту ліспа, який написаний на сішці, важить майже нічого, легко інтегрується з сішним кодом в обидва боки тощо. І спробував її для задач на пʼятнадцятий день!
На початку було дуже складно, зокрема через відсутність навичок роботи з реплом та редагування лісп-коду. «Кляті дужки!» 😂 Без paredit погано, з paredit погано — про це окремо ще розповім.
Одним із сюрпризів став той факт, що на ліспі взагалі-то можна (і дуже легко) писати імперативно. Чогось був переконаний, що це чисто ФП-шна штука на кшталт Haskell. Тож тут одразу +1 до приємності.
У Janet також є фішка з підтримкою PEG, якою вони надихнулися зокрема з REBOL/Red. Для задачі воно було непотрібно — можна було тупо працювати з charʼами, але мені кортіло спробувати, тож я запарсив файл отакою граматикою:
Через наявність PEG у Janet немає підтримки регулярних виразів, бо в принципі вони непотрібні. Я не певен, чи це добре: все-таки інколи фігачнути маленький regexp швидше й легше, але ок. Іншим мінусом Janetʼівського
Із загальних приємностей Janet: є fibers, threads, channels, streams тощо — все, що потрібно, є. Також доволі розвинена стандартна бібліотека, менеджер пакетів, FFI взаємодії з сішним кодом.
До синтаксису звикаєш значно швидше, ніж здалося на початку. А ось до назв функцій трохи повільніше. Мій чинний код стопудєй максимально далекий від ідіоматичного і ще далі від оптимального, але я отримав задоволення, доки писав!
Другу задачу, яка фактично є ускладненою версією гри Sokoban, я так і не доробив трохи. Коли починав, то прийняв не найкращі рішення щодо структур даних, потім нахуєвертив зверху, задобався з цим боротися, та й загалом дуже втомився. На цьому мій Advent of Code завершився.
Я ще згодом напишу підсумки про саму подію, а зараз можу впевнено сказати, що Janet — це одна з моїх нових улюблених мов!
Ліспи з їхньою купою варіацій і REBOL з наразі єдиним нащадком Red — це D&D 🎮 світу програмування. Є десяток базових правил, а далі все обмежується лише вашою фантазією (і спроможностями заліза гг). Обидва мають суперпростий синтаксис — можна навіть сказати, що ніякого синтаксису немає: ви просто пишете слова, а потім наділяєте їх власними значеннями. Звучить як казка.
Я вже намагався зробити підхід до Clojure десять років тому, але вочевидь був неготовий ментально. Зараз же зробив другу спробу і… не зміг себе пересилити: дивлюся в цей короткий лаконічний код, а подумки бачу, як JVM нестямно жере памʼять мого компа, і уявляю, як мені доведеться йти крізь ієрархію тек, щоб нарешті знайти там свій єдиний файл з кодом.
На щастя з одного зі стрімів пана Соловйова я дізнався про існування мови Janet 👩🦰 — дуже схожого на кложу діалекту ліспа, який написаний на сішці, важить майже нічого, легко інтегрується з сішним кодом в обидва боки тощо. І спробував її для задач на пʼятнадцятий день!
На початку було дуже складно, зокрема через відсутність навичок роботи з реплом та редагування лісп-коду. «Кляті дужки!» 😂 Без paredit погано, з paredit погано — про це окремо ще розповім.
Одним із сюрпризів став той факт, що на ліспі взагалі-то можна (і дуже легко) писати імперативно. Чогось був переконаний, що це чисто ФП-шна штука на кшталт Haskell. Тож тут одразу +1 до приємності.
У Janet також є фішка з підтримкою PEG, якою вони надихнулися зокрема з REBOL/Red. Для задачі воно було непотрібно — можна було тупо працювати з charʼами, але мені кортіло спробувати, тож я запарсив файл отакою граматикою:
(defn parse-input [input]
Через наявність PEG у Janet немає підтримки регулярних виразів, бо в принципі вони непотрібні. Я не певен, чи це добре: все-таки інколи фігачнути маленький regexp швидше й легше, але ок. Іншим мінусом Janetʼівського
peg/match
є той факт, що вона працює тільки з рядками на вході. Якщо порівнювати з ріболівським parse
, це сильний недолік, адже там вони прям блоки коду (а код — це дані) парсять тим же самим парсом. Це логічніше, бо яка різниця, що ви отримуєте на вхід: список текстових літер чи список кейвордів? Через це нові діалекти в REBOL робити легше й приємніше.Із загальних приємностей Janet: є fibers, threads, channels, streams тощо — все, що потрібно, є. Також доволі розвинена стандартна бібліотека, менеджер пакетів, FFI взаємодії з сішним кодом.
До синтаксису звикаєш значно швидше, ніж здалося на початку. А ось до назв функцій трохи повільніше. Мій чинний код стопудєй максимально далекий від ідіоматичного і ще далі від оптимального, але я отримав задоволення, доки писав!
Другу задачу, яка фактично є ускладненою версією гри Sokoban, я так і не доробив трохи. Коли починав, то прийняв не найкращі рішення щодо структур даних, потім нахуєвертив зверху, задобався з цим боротися, та й загалом дуже втомився. На цьому мій Advent of Code завершився.
Я ще згодом напишу підсумки про саму подію, а зараз можу впевнено сказати, що Janet — це одна з моїх нових улюблених мов!
23.09.202410:27
«Цікава» штука тут у мене трапилася. Є проєкт, в якому прописані деякі депенденси на пакети в #Conan:
Чудово все працювало. От тільки останній реліз був один рік тому, а відтоді ми його майже не чіпали.
А сьогодні я сів його зібрати, а він мені каже: «Хєр тобі! Конфлікт версій, йопта!» — Типу
WHAT. THE. ACTUAL. FUCK⁉️
Як таке взагалі можливо? Який прикол у існуванні пекедж-менеджера, якщо можна поміняти залежність заднім числом? Та навіть у пайтоні такого немає! 🤯
І тепер я ставлю
Тему керування залежностями вже обсмоктали всі підряд по своїх каналах, і я був певен, що втримаюся, але дупця згоріла добряче з цього. Отож…
Нагадую, що єдине адекватне рішення для депенденсі-менеджера — це:
1) не давати можливості заливати різні пакети під однією й тією ж версією: якщо версія вже існує — то або інкременти її й роби нову, або досвідос;
2) не давати можливості вказувати в залежностях діапазони версій на кшталт
3) бажано ще й не давати видаляти 😄
«А як же автоматично отримувати мінорні оновлення?» — спитаєте ви. А ніяк! У ваші semver я не повірю доти, доки у прийнятті рішення, яку частину (major/minor/patch) версії треба інкрементити, бере участь людина.
Хтось тут може сказати, що це давно автоматизується за допомогою conventional commits, по яких потім воно нарощує версію в залежності від наявності
Скоро так дограємося, що пральна машинка не ввімкнеться, якщо два тижні нею не користувався через відпустку.
fmt/9.1.0
spdlog/1.11.0
Чудово все працювало. От тільки останній реліз був один рік тому, а відтоді ми його майже не чіпали.
А сьогодні я сів його зібрати, а він мені каже: «Хєр тобі! Конфлікт версій, йопта!» — Типу
fmt/9.1.0
конфліктує з вимогою fmt/10.0.0
, що вписана в spdlog
. WHAT. THE. ACTUAL. FUCK⁉️
Як таке взагалі можливо? Який прикол у існуванні пекедж-менеджера, якщо можна поміняти залежність заднім числом? Та навіть у пайтоні такого немає! 🤯
І тепер я ставлю
fmt/10.0.0
, а воно не збирається, бо там зник якийсь template
, від якого ми наслідувалися. Оце жесть. Щиро дякую за можливість вбити зайвий день на рівному місці.Тему керування залежностями вже обсмоктали всі підряд по своїх каналах, і я був певен, що втримаюся, але дупця згоріла добряче з цього. Отож…
Нагадую, що єдине адекватне рішення для депенденсі-менеджера — це:
1) не давати можливості заливати різні пакети під однією й тією ж версією: якщо версія вже існує — то або інкременти її й роби нову, або досвідос;
2) не давати можливості вказувати в залежностях діапазони версій на кшталт
pkg/[>=6.4 <6.8]
, pkg/[~1]
тощо — тільки повна версія;3) бажано ще й не давати видаляти 😄
«А як же автоматично отримувати мінорні оновлення?» — спитаєте ви. А ніяк! У ваші semver я не повірю доти, доки у прийнятті рішення, яку частину (major/minor/patch) версії треба інкрементити, бере участь людина.
Хтось тут може сказати, що це давно автоматизується за допомогою conventional commits, по яких потім воно нарощує версію в залежності від наявності
feat:
або fix:
. Але ж рішення, що ставити, feat чи fix, все одно приймає людина, тож яка різниця?Скоро так дограємося, що пральна машинка не ввімкнеться, якщо два тижні нею не користувався через відпустку.
28.04.202509:34
Я обожнюю #QML. Все-таки Nokia сильно випередила час із ним.
Отож пишу на QML багацько. Останні пів року чи рік з ґітгабівським копайлотом. Проте для робочих проєктів для замовника копайлот не можна використовувати, бо досі з легальними питаннями не розібралися.
Вирішив спробувати приготувати QML-ний копайлот самостійно. Рецепт такий:
1. Беремо Ollama.
2. Додаємо FIM-модель (Fill-in-the-Middle) для QML, скажімо параметрів на сім-тринадцять мільярдів до смаку.
3. Ставимо у VS Code розширення, яке спілкуватиметься з моделлю.
4. ???????
5. PROFIT! 🥳
Гарні новини: модель існує й навіть офіційна від Qt. Ну, взагалі-то навчити з нуля модель такого розміру — дорого й невигідно, тому насправді це Meta-вська CodeLlama, яку дотренували на якомусь відкритому QML-коді типу офіційних прикладів.
Що взагалі робить будь-яка така модель? Ви закидаєте в неї код (текст), воно його токенізує якось (у кожної моделі власний токенізатор), а потім генерує декілька наступних токенів, які ми перетворюємо назад на текст. Тобто ви пишете
Але код ми не пишемо як повість на друкарській машинці — ми часто повертаємося кудись в середину, щось додаємо, міняємо, видаляємо тощо. Як же бути?
Якщо ми передаватимемо тільки текст до курсора, щоб модель щось додала від себе, то можемо загубити багато важливого контексту після, й доповнення не буде надто корисним.
Щоб розв'язати цю проблему, всі FIM-моделі дозволяють певного роду розмітку (насправді всі інші LLM також). Наприклад, CodeLlama дозволяє передавати їй текст у таких форматах:
Тут токен
Погані новини: для VS Code я знайшов якесь розширення Llama Coder, і воно вже вміє працювати з CodeLlama, а також дозволяє вказувати власну модель. Але виявилося, що промпт воно формує у вигляді
Вони прям вимагають, щоб формат був
Це запрацювало, хоча не сказати, що швидко. Точніше прям неприємно на моєму M1 Max / 64 GB — користуватися неможливо. І це 7 мільярдів параметрів, а не 13! Зате повністю локально, і доповнює вельми адекватно, щоправда форматування пливе.
Дивитимусь далі, що з цим можна ще зробити, щоб було зручно. Ненавиджу довгі мануали — треба, щоб однією кнопкою все встановлювалося ))
Ліричний відступ для тих, хто не в темі: QML — це така мова в 💻. Вона декларативна, тобто ви описуєте, що хочете отримати, а не послідовність кроків для досягнення мети. Всі властивості обʼєктів у ній — реактивні, тобто, якщо ви пишете, що height: width / 2, то значення висоти оновлюватиметься щоразу, як оновилася ширина. Ну й на додачу можна писати локальні обробники сигналів на імперативному 💻, якщо треба. І все це швидко працює й рендериться на GPU. Непогано як для технології 2009 року отже.
Люди, правда, зазвичай ототожнюють QML (мову) і Qt Quick (один з UI-них фреймворків від Qt), але мову можна використовувати не тільки для UI.
Отож пишу на QML багацько. Останні пів року чи рік з ґітгабівським копайлотом. Проте для робочих проєктів для замовника копайлот не можна використовувати, бо досі з легальними питаннями не розібралися.
Вирішив спробувати приготувати QML-ний копайлот самостійно. Рецепт такий:
1. Беремо Ollama.
2. Додаємо FIM-модель (Fill-in-the-Middle) для QML, скажімо параметрів на сім-тринадцять мільярдів до смаку.
3. Ставимо у VS Code розширення, яке спілкуватиметься з моделлю.
4. ???????
5. PROFIT! 🥳
Гарні новини: модель існує й навіть офіційна від Qt. Ну, взагалі-то навчити з нуля модель такого розміру — дорого й невигідно, тому насправді це Meta-вська CodeLlama, яку дотренували на якомусь відкритому QML-коді типу офіційних прикладів.
Що взагалі робить будь-яка така модель? Ви закидаєте в неї код (текст), воно його токенізує якось (у кожної моделі власний токенізатор), а потім генерує декілька наступних токенів, які ми перетворюємо назад на текст. Тобто ви пишете
import
, а воно дає наступний токен чи декілька, які з 99% ймовірністю будуть QtQuick\n
. Але код ми не пишемо як повість на друкарській машинці — ми часто повертаємося кудись в середину, щось додаємо, міняємо, видаляємо тощо. Як же бути?
Якщо ми передаватимемо тільки текст до курсора, щоб модель щось додала від себе, то можемо загубити багато важливого контексту після, й доповнення не буде надто корисним.
Щоб розв'язати цю проблему, всі FIM-моделі дозволяють певного роду розмітку (насправді всі інші LLM також). Наприклад, CodeLlama дозволяє передавати їй текст у таких форматах:
Тут токен
<mid>
каже моделі, що ось з цього місця — твій вихід, будь ласкава.Погані новини: для VS Code я знайшов якесь розширення Llama Coder, і воно вже вміє працювати з CodeLlama, а також дозволяє вказувати власну модель. Але виявилося, що промпт воно формує у вигляді
…<suf>…<mid>
, а ці QML-ні моделі якось так дивно перенавчені, що у відповідь на це видають повну маячню.Вони прям вимагають, щоб формат був
<suf>……<mid>
. Довелося форкати розширення й міняти. По дорозі знайшов і виправив ваду з неправильною вичиткою налаштувань, а також додав кропаль покращень від себе.Це запрацювало, хоча не сказати, що швидко. Точніше прям неприємно на моєму M1 Max / 64 GB — користуватися неможливо. І це 7 мільярдів параметрів, а не 13! Зате повністю локально, і доповнює вельми адекватно, щоправда форматування пливе.
Дивитимусь далі, що з цим можна ще зробити, щоб було зручно. Ненавиджу довгі мануали — треба, щоб однією кнопкою все встановлювалося ))
25.03.202512:22
Я не професійний користувач цих тулів, а радше аматор. Певно, люди з досвідом вже знають, як оминати гострі кути. В мене ж окрім всіх цих пригод з імпортом фотошоп крашнув 4–5 разів.
(Ще цікаво, що я зустрів вже другий за пів року ймовірно самописний парсер CSV, який працює як лайно. Попередній використовувався у грі й не здатен був обробляти лапки взагалі 😂)
Мені досі подобаються деякі продукти Adobe. Той же фотошоп — це тупо пушка для роботи з растром (хоча не для малювання), і жодний GIMP з ним не зрівняється. А Illustrator на 10 голів вище за ваш хвалений Inkscape та будь-що інше для роботи зі складною векторною графікою.
Але прикол у тому, що в сучасних інтерфейсах немає ані складної растрової графіки (як у тому ж скевоморфізмі з фактурними матеріалами, рефлексами тощо), ані складної векторної (особливо в обриганських flat/material чи класному мобільному metro). Доволі примітивно все короч. Тож на перший план виходять вже зовсім інші фічі, проте, компаніям на кшталт Adobe це невтямки. (Я їх ще за вбивство Flash не пробачив).
(Ще цікаво, що я зустрів вже другий за пів року ймовірно самописний парсер CSV, який працює як лайно. Попередній використовувався у грі й не здатен був обробляти лапки взагалі 😂)
Мені досі подобаються деякі продукти Adobe. Той же фотошоп — це тупо пушка для роботи з растром (хоча не для малювання), і жодний GIMP з ним не зрівняється. А Illustrator на 10 голів вище за ваш хвалений Inkscape та будь-що інше для роботи зі складною векторною графікою.
Але прикол у тому, що в сучасних інтерфейсах немає ані складної растрової графіки (як у тому ж скевоморфізмі з фактурними матеріалами, рефлексами тощо), ані складної векторної (особливо в обриганських flat/material чи класному мобільному metro). Доволі примітивно все короч. Тож на перший план виходять вже зовсім інші фічі, проте, компаніям на кшталт Adobe це невтямки. (Я їх ще за вбивство Flash не пробачив).


22.02.202513:42
Оце спалився. Не знав, що ґітгаб про таке пише 😅 Ще й рахує!
01.11.202409:55
Сьогодні пʼятниця, й особисто в мене сьогодні вихідний.
А ви думали чи, може, навіть мріяли колись про чотириденний робочий тиждень? Я теж!
І я не тільки спробував, працюючи при цьому в аутсорс-компанії ⛴, а й зробив його для всієї своєї команди 😎
P.S. З вас усіх по репосту, бо скіки можна, їй-богу. Ексклюзивний матеріал врешті-решт 😉
А ви думали чи, може, навіть мріяли колись про чотириденний робочий тиждень? Я теж!
І я не тільки спробував, працюючи при цьому в аутсорс-компанії ⛴, а й зробив його для всієї своєї команди 😎
P.S. З вас усіх по репосту, бо скіки можна, їй-богу. Ексклюзивний матеріал врешті-решт 😉
20.09.202410:14
Ух, 💻 прям активізувалася 🤔 Нещодавно релізнули екстеншн до vscode 💻 з language server для #QML (екстеншн лайно, проте, як перший крок норм), а зараз ось зробили плагін для Gradle, щоб легше було під Android 💻 збирати.
24.04.202509:58
Скільки насправді коштують книжки? А ігри? А інші ваші хобі?
Ви можете або почитати книжку по програмуванню, або піти на прогулянку мацати траву — що вибрати і чому?
Коли ви купуєте книжку за 30 баксів, може здатися, що ви втратили 30 баксів (так і буде, якщо не прочитати). Проте окрім «першого внеску» ви платитимете своїм часом, який далеко не безкоштовний.
Якщо ви маєте регулярний дохід 💰, то ціну часу легко вирахувати. Уявімо, що ваша місячна зарплатня — 5000 доларів. У місяці в середньому 22 робочих дні, в кожному робочому дні 8 годин, тому ваша погодинна ставка — 28,4$/год. Втім рахувати все з нею було б трохи несправедливо, адже навряд чи в позаробочий час ви зможете заробляти ще стільки ж, принаймні достатньо довго. Тому натомість «нормалізуємо» й порахуємо всі години, а не тільки робочі. З 30 днями в середньому і 24 годинами на добу маємо близько 7 доларів на годину.
На читання книжки ви витратили 4 години, тобто ще 28 баксів — майже подвоївши її початкову ціну! 🤯 А тепер ще гляньте на свою статистику в доті, КС й геншині. Скіки там вже? Ще 3000 годин загалом? Це вартість автівки )) Годі витрачати отак свої гроші. Почніть заробляти вже зараз!
Пропоную вашій увазі свій новий суперпродукт, який дозволить вам досягти небаченого рівня персональної продуктивності — Crastinator Pro™. Як бачите на відео зверху, цей ультракорисний таймер показує вам вартість того, чим ви зайняті, в реальному часі. Підтримуються різні валюти, рейт можна встановлювати погодинно, по місячній зп або як річний дохід. Наразі це реалізовано як плаґін для Raycast, але в дорожній карті проєкту вже закладено переписування на Rust і додавання AI-фічей.
Враховуючи, що я <strike>навайбкодив його за пів години</strike> витратив на його розробку значну кількість особистих ресурсів, безплатно я його віддати не можу, зате гарантую коректність розрахунків, адже вже встиг протестувати його проходженням Mass Effect 🎮 (200 годин), Baldur's Gate 3 🎮 (300 годин), низки дрібніших активностей, а також щоденними регресійними й смоук-тестами за переглядом фільмів. Тому пропоную стартову ціну 800 гривень 🤑
На жаль ця ціна покриє тільки мої початкові витрати, тому якщо ви хочете отримувати оновлення й фічі, мені доведеться знову пройти Mass Effect, тож апдейти на рік коштуватимуть ще 250₴, що на мою думку дуже вигідна пропозиція! Не зволікайте!
У мене ж до вас лишилося всього два запитання:
1. Шо думаєте з цього приводу?
2. Чого досі не пограли в Mass Effect?
Ви можете або почитати книжку по програмуванню, або піти на прогулянку мацати траву — що вибрати і чому?
Коли ви купуєте книжку за 30 баксів, може здатися, що ви втратили 30 баксів (так і буде, якщо не прочитати). Проте окрім «першого внеску» ви платитимете своїм часом, який далеко не безкоштовний.
Якщо ви маєте регулярний дохід 💰, то ціну часу легко вирахувати. Уявімо, що ваша місячна зарплатня — 5000 доларів. У місяці в середньому 22 робочих дні, в кожному робочому дні 8 годин, тому ваша погодинна ставка — 28,4$/год. Втім рахувати все з нею було б трохи несправедливо, адже навряд чи в позаробочий час ви зможете заробляти ще стільки ж, принаймні достатньо довго. Тому натомість «нормалізуємо» й порахуємо всі години, а не тільки робочі. З 30 днями в середньому і 24 годинами на добу маємо близько 7 доларів на годину.
На читання книжки ви витратили 4 години, тобто ще 28 баксів — майже подвоївши її початкову ціну! 🤯 А тепер ще гляньте на свою статистику в доті, КС й геншині. Скіки там вже? Ще 3000 годин загалом? Це вартість автівки )) Годі витрачати отак свої гроші. Почніть заробляти вже зараз!
Пропоную вашій увазі свій новий суперпродукт, який дозволить вам досягти небаченого рівня персональної продуктивності — Crastinator Pro™. Як бачите на відео зверху, цей ультракорисний таймер показує вам вартість того, чим ви зайняті, в реальному часі. Підтримуються різні валюти, рейт можна встановлювати погодинно, по місячній зп або як річний дохід. Наразі це реалізовано як плаґін для Raycast, але в дорожній карті проєкту вже закладено переписування на Rust і додавання AI-фічей.
Враховуючи, що я <strike>навайбкодив його за пів години</strike> витратив на його розробку значну кількість особистих ресурсів, безплатно я його віддати не можу, зате гарантую коректність розрахунків, адже вже встиг протестувати його проходженням Mass Effect 🎮 (200 годин), Baldur's Gate 3 🎮 (300 годин), низки дрібніших активностей, а також щоденними регресійними й смоук-тестами за переглядом фільмів. Тому пропоную стартову ціну 800 гривень 🤑
На жаль ця ціна покриє тільки мої початкові витрати, тому якщо ви хочете отримувати оновлення й фічі, мені доведеться знову пройти Mass Effect, тож апдейти на рік коштуватимуть ще 250₴, що на мою думку дуже вигідна пропозиція! Не зволікайте!
У мене ж до вас лишилося всього два запитання:
1. Шо думаєте з цього приводу?
2. Чого досі не пограли в Mass Effect?
31.03.202509:59
Зараз навчу вас давати конструктивний фідбек і відповідно виявляти людей, які просто марнують ваш час.
Пише мені якийсь чувак у рандомному чаті:
Еммм… ну ок… і шо далі? Що мені з цією інформацією робити, і як вона мені допоможе? Очевидно ж, що ніяк, бо не ясно, а які були очікування, а що саме вийшло за їх межі тощо. Якби ж була хоч якась ознака, що далі можна побудувати конструктивний діалог, я б навіть розпитав, а так лишається тільки сказати щось на кшталт: «Ну, досвідос!» 👋
Працює це до речі не тільки з негативними відгуками, а й з позитивними. Якщо після якоїсь презентації мені хтось казатиме: «Дякую, мені так сподобалося! — то я обовʼязково спитаю, — А що саме?» Тоді можна принаймні збагнути, що людям більше заходить. Бо від простих лестощів користі не надто багато, згодні?
Так а як робити, щоб користь була?
По-перше, подумайте, з якою метою ви взагалі хочете поділитися своєю думкою. Чи дійсно ви хочете допомогти людині, з якою спілкуєтеся? Якщо так, то ок. А якщо насправді вас просто зачепило, що людина не збагнула магічним чином ваших потреб і не задовольнила їх, а тепер ви просто хочете їй повідомити про особисту образу й привернути увагу до себе, то краще мовчки пройти повз. Бо я ще не бачив випадків, коли б таке закінчувалося добре 😄
По-друге, якщо вже лишаєте відгук, то давайте якомога більше деталей. Що більше контексту буде у людини, то краще, бо для неї це буде схоже на фікс креша з occurence: once. Всі ми знаємо, що мінімальний адекватний набір для розвʼязання подібної проблеми — це кроки для повторення + логи. Інакше легше зареджектити і забути. Звісно, що інколи доводиться, бува, шукати розвʼязок крешів буквально навпомацки, але зазвичай для цього потрібна сильна зовнішня мотивація, тож то радше винятки вже ))
По-третє, кажіть про слова/поведінку, але не про особистість. Тобто не «ти — хуй», а «ти отам сказав хуйню». Різниця чимала, повірте. Хоча це ще й від культури залежить, бо українці навіть другу фразу сприйматимуть як атаку на особистість, бо не вміють розділяти ці речі. Загалом незалежно від культури краще уникати тверджень з «ти», замінюючи їх на твердження з «я». Іншими словами замість «краще б ти більше писав про 💻» правильніше буде сказати «я був би радий, якби ти більше писав про C++, тому що…»
По-четверте, підкріплюйте сказане фактами. Це не єдина, але, сподіваюся, очевидна вимога для хоч якоїсь обʼєктивності.
По-пʼяте, фідбек краще давати якомога швидше після відповідної події, доки й ви самі, і людина ще в контексті. Якщо відгук негативний, то головне не робити це під впливом емоцій, але якщо ви вдало пройшли пункт 1, то має бути норм.
Ну й наостанок нагадаю, що не всім ваш відгук взагалі потрібен. Часто бачу, як люди лишають десь коментар і автоматично формують на базі нього якісь власні очікування, а потім ображаються, що «до них не прислухаються». Ну так ніхто й не зобовʼязаний, тю 🙂
Якщо дочитали аж сюди, то знайте, що я завжди (чи майже завжди гг) радо приймаю будь-який конструктивний фідбек, бо його дуже бракує.
Пише мені якийсь чувак у рандомному чаті:
До речі відписався від сіплапластика бо якісь занадто хуйові тейки в стрічці були
Еммм… ну ок… і шо далі? Що мені з цією інформацією робити, і як вона мені допоможе? Очевидно ж, що ніяк, бо не ясно, а які були очікування, а що саме вийшло за їх межі тощо. Якби ж була хоч якась ознака, що далі можна побудувати конструктивний діалог, я б навіть розпитав, а так лишається тільки сказати щось на кшталт: «Ну, досвідос!» 👋
Працює це до речі не тільки з негативними відгуками, а й з позитивними. Якщо після якоїсь презентації мені хтось казатиме: «Дякую, мені так сподобалося! — то я обовʼязково спитаю, — А що саме?» Тоді можна принаймні збагнути, що людям більше заходить. Бо від простих лестощів користі не надто багато, згодні?
Так а як робити, щоб користь була?
По-перше, подумайте, з якою метою ви взагалі хочете поділитися своєю думкою. Чи дійсно ви хочете допомогти людині, з якою спілкуєтеся? Якщо так, то ок. А якщо насправді вас просто зачепило, що людина не збагнула магічним чином ваших потреб і не задовольнила їх, а тепер ви просто хочете їй повідомити про особисту образу й привернути увагу до себе, то краще мовчки пройти повз. Бо я ще не бачив випадків, коли б таке закінчувалося добре 😄
По-друге, якщо вже лишаєте відгук, то давайте якомога більше деталей. Що більше контексту буде у людини, то краще, бо для неї це буде схоже на фікс креша з occurence: once. Всі ми знаємо, що мінімальний адекватний набір для розвʼязання подібної проблеми — це кроки для повторення + логи. Інакше легше зареджектити і забути. Звісно, що інколи доводиться, бува, шукати розвʼязок крешів буквально навпомацки, але зазвичай для цього потрібна сильна зовнішня мотивація, тож то радше винятки вже ))
По-третє, кажіть про слова/поведінку, але не про особистість. Тобто не «ти — хуй», а «ти отам сказав хуйню». Різниця чимала, повірте. Хоча це ще й від культури залежить, бо українці навіть другу фразу сприйматимуть як атаку на особистість, бо не вміють розділяти ці речі. Загалом незалежно від культури краще уникати тверджень з «ти», замінюючи їх на твердження з «я». Іншими словами замість «краще б ти більше писав про 💻» правильніше буде сказати «я був би радий, якби ти більше писав про C++, тому що…»
По-четверте, підкріплюйте сказане фактами. Це не єдина, але, сподіваюся, очевидна вимога для хоч якоїсь обʼєктивності.
По-пʼяте, фідбек краще давати якомога швидше після відповідної події, доки й ви самі, і людина ще в контексті. Якщо відгук негативний, то головне не робити це під впливом емоцій, але якщо ви вдало пройшли пункт 1, то має бути норм.
Ну й наостанок нагадаю, що не всім ваш відгук взагалі потрібен. Часто бачу, як люди лишають десь коментар і автоматично формують на базі нього якісь власні очікування, а потім ображаються, що «до них не прислухаються». Ну так ніхто й не зобовʼязаний, тю 🙂
Якщо дочитали аж сюди, то знайте, що я завжди (чи майже завжди гг) радо приймаю будь-який конструктивний фідбек, бо його дуже бракує.


25.03.202512:22
Не дивно, що Adobe програла битву за найкращий інструмент для дизайну інтерфейсів. Спочатку Sketch показав, що багато речей можна зробити значно зручніше, ніж у Photoshop. І Adobe навіть якийсь час це ігнорувала, аж поки не зробила власний (вже мертвий) XD. Ну а Figma 💻 той результат ще закріпила, правда, в процесі ледь не продалася.
Цими вихідними посидів у фотошопі короч. Мало хто знає, але там є підтримка змінних — навіть у фігмі їх ще десь рік тому не було. Стає в пригоді, якщо треба нагенерити пачку схожих зображень по шаблону: візитівки, листівки зі всратими цуценятами, запрошення на весілля або, як у моєму випадку, купа однотипних обкладинок для статей у блог (не собі).
Робиться це таким чином: спочатку встановлюєте звʼязок між шарами й змінними, а потім підставляєте туди різні значення з набору даних. Наприклад, можна текст міняти, підставляти інші зображення під масочку, вмикати/вимикати видимість чогось тощо. Набивати набір даних руками в самому фотошопі не надто зручно — краще імпортнути з CSV.
Краще ж?
Відкрив Excel, накидав швидесенько, експортнув — і ПОТРАПИВ У ПЕКЛО!!! Я не жартую 😫 Фотошоп просто висирає помилку й відмовляється імпортувати дані.
1. Excel при збереженні в CSV покладається на регіональний формат системи. В Європі десятковий роздільник зазвичай — це кома, тому стовпчики ексель розділяє крапкою з комою. Важко в це повірити, але так: фотошоп це не схавав. Довелося фіксити вручну.
2. Microsoft хоч і використовує UTF-8 давно, але полюбляє бахнути на початок файлу BOM. Вгадайте шо? Правильно, фотошоп не зміг вдуплити. Перезберіг руками без BOM.
3. Якщо стовпчиків більше, ніж змінних, які ви визначили, то фотошоп проігнорувати їх не може — кидає помилку. Але не каже, що саме не так, а пише геть неадекватну маячню. Багаторічний досвід порпання в лайні (aka інтуїція) підказав мені спробувати прибрати зайві — і це допомогло.
4. Кодування. Так, ви все правильно прочитали. Проблеми з кодуванням у 2k25. Так, у UTF-8! 🤕 Ми-то з вами звикли давно взагалі на це увагу не звертати, бо нині будь-який нормальний текстовий редактор одразу детектить без проблем. Але не суперсофт від Adobe! Якщо залишити «автоматичне» визначення кодування, то деякі не-ASCII символи поїбало. Потім ще щось не виходило. Врешті перезберіг взагалі в UTF-16 і вказав вручну при імпорті.
5. Лапки. Тут взагалі якийсь треш, який мені важко пояснити. Короч, у мене був текст на кшталт
6. У мене насправді два шаблони з двома датасетами були. У перший я так і не зміг імпортувати CSV. А знаєте, що зміг? Tab-delimeted plain text! Нє, ну а шо, хоч якось.
Фу-у-ух, це було важко. Ну далі-то вже як пісня литиметься, мабуть.
Просто береш і генеруєш з того набору даних по шаблону пачку зображень… у форматі PSD 🤦♂️ Що з ними робити? Ну, у фотошопі є процесор зображень, який вміє переганяти PSD у JPEG або TIFF. Як щодо PNG або WebP? Нє, не чули. Зберіг все в TIFF, а потім тупо вже у маківському файндері конвертнув у PNG. Спочатку намагався зробити це через ImageMagick, але виявилося, що в мене там шари різного розміру, і воно їх не кліпало, а робило зображення більше.
А тепер тримайте правильний спосіб виконання подібної роботи:
• Робите у фотошопі всю складну роботу з растром. Зберігаєте це як зображення.
• Імпортуєте його у фігму, а там вже додаєте текст, кліпінг-масочки, тіні, лейаут, робите купу інстансів, як вам треба, експортуєте однією кнопкою без хєрні. Все.
Цими вихідними посидів у фотошопі короч. Мало хто знає, але там є підтримка змінних — навіть у фігмі їх ще десь рік тому не було. Стає в пригоді, якщо треба нагенерити пачку схожих зображень по шаблону: візитівки, листівки зі всратими цуценятами, запрошення на весілля або, як у моєму випадку, купа однотипних обкладинок для статей у блог (не собі).
Робиться це таким чином: спочатку встановлюєте звʼязок між шарами й змінними, а потім підставляєте туди різні значення з набору даних. Наприклад, можна текст міняти, підставляти інші зображення під масочку, вмикати/вимикати видимість чогось тощо. Набивати набір даних руками в самому фотошопі не надто зручно — краще імпортнути з CSV.
Краще ж?
Відкрив Excel, накидав швидесенько, експортнув — і ПОТРАПИВ У ПЕКЛО!!! Я не жартую 😫 Фотошоп просто висирає помилку й відмовляється імпортувати дані.
1. Excel при збереженні в CSV покладається на регіональний формат системи. В Європі десятковий роздільник зазвичай — це кома, тому стовпчики ексель розділяє крапкою з комою. Важко в це повірити, але так: фотошоп це не схавав. Довелося фіксити вручну.
2. Microsoft хоч і використовує UTF-8 давно, але полюбляє бахнути на початок файлу BOM. Вгадайте шо? Правильно, фотошоп не зміг вдуплити. Перезберіг руками без BOM.
3. Якщо стовпчиків більше, ніж змінних, які ви визначили, то фотошоп проігнорувати їх не може — кидає помилку. Але не каже, що саме не так, а пише геть неадекватну маячню. Багаторічний досвід порпання в лайні (aka інтуїція) підказав мені спробувати прибрати зайві — і це допомогло.
4. Кодування. Так, ви все правильно прочитали. Проблеми з кодуванням у 2k25. Так, у UTF-8! 🤕 Ми-то з вами звикли давно взагалі на це увагу не звертати, бо нині будь-який нормальний текстовий редактор одразу детектить без проблем. Але не суперсофт від Adobe! Якщо залишити «автоматичне» визначення кодування, то деякі не-ASCII символи поїбало. Потім ще щось не виходило. Врешті перезберіг взагалі в UTF-16 і вказав вручну при імпорті.
5. Лапки. Тут взагалі якийсь треш, який мені важко пояснити. Короч, у мене був текст на кшталт
“some text”
з правильними типографськими лапками, але при імпорті вони чомусь зʼїдалися, і у фотошопі їх не було. Вирішив загорнути всі стовпчики в програмерські лапки. Вийшло отак: "“some text”"
. Вгадайте, в якому вигляді це потрапило у фотошопівський датасет? Хуяк: "some text” — зліва пряма програмерська, справа нормальна типографська. Виправив руками в самому фотошопі (датасет на 30 елементів).6. У мене насправді два шаблони з двома датасетами були. У перший я так і не зміг імпортувати CSV. А знаєте, що зміг? Tab-delimeted plain text! Нє, ну а шо, хоч якось.
Фу-у-ух, це було важко. Ну далі-то вже як пісня литиметься, мабуть.
Просто береш і генеруєш з того набору даних по шаблону пачку зображень… у форматі PSD 🤦♂️ Що з ними робити? Ну, у фотошопі є процесор зображень, який вміє переганяти PSD у JPEG або TIFF. Як щодо PNG або WebP? Нє, не чули. Зберіг все в TIFF, а потім тупо вже у маківському файндері конвертнув у PNG. Спочатку намагався зробити це через ImageMagick, але виявилося, що в мене там шари різного розміру, і воно їх не кліпало, а робило зображення більше.
А тепер тримайте правильний спосіб виконання подібної роботи:
• Робите у фотошопі всю складну роботу з растром. Зберігаєте це як зображення.
• Імпортуєте його у фігму, а там вже додаєте текст, кліпінг-масочки, тіні, лейаут, робите купу інстансів, як вам треба, експортуєте однією кнопкою без хєрні. Все.
11.02.202511:16
Мали колись доменне імʼя у володінні?
Коли купуєш собі домен вперше і намагаєшся прикрутити його до сайту або пошти, то воно трохи складнувато без досвіду. І доволі легко наламати щось, що пʼять хвилин тому вже працювало.
Натрапив на сайт, де можна погратися з тимчасовим доменом, постворювати собі DNS-записи різних типів, подивитися на запити, що приходять тощо: ⭐️ mess with dns ⭐️︎.
(Думав ще того тижня про це написати, але він якийсь час лежав мертвий 😆)
Коли купуєш собі домен вперше і намагаєшся прикрутити його до сайту або пошти, то воно трохи складнувато без досвіду. І доволі легко наламати щось, що пʼять хвилин тому вже працювало.
Натрапив на сайт, де можна погратися з тимчасовим доменом, постворювати собі DNS-записи різних типів, подивитися на запити, що приходять тощо: ⭐️ mess with dns ⭐️︎.
(Думав ще того тижня про це написати, але він якийсь час лежав мертвий 😆)


26.10.202413:36
Писати на 💻 у VS Code 💻 — це, звісно, класно і зручно, але блять… Треба було брати комп зі 128 ГБ оперативи.
(Другий рядок з
(Другий рядок з
java
— це SonarLint, до речі, теж з VS Code).20.09.202409:48
Якщо хтось чекав на можливість нарешті використовувати #QML у ваших WPF-програмах під 💻 (вже ніхто не чекав), wait no more.
Схоже, втративши купу ринків, 💻 раптово збагнула, що було б непогано мати офіційні байндінги до інших мов окрім 💻 та 💻, і хтось там у них написав кастомний нейтів хост під .NET.
Можливо, #QML — це наразі одна з найвагоміших причин, чого я досі тримаюся C++. Я просто дуже полюбляю робити UI, і саме завдяки цим двом мовам я здатен досягати найшвидших та найякісніших результатів. Python відштовхує своєю повільністю виконання та труднощами розповсюдження готових програм. А під інші мови всі байндінги сумнівної якості й написані хтозна-ким.
Це не значить, звісно, що я зараз раптово перейду на 💻, але може вони нарешті подивляться в бік чогось зручнішого та сучаснішого.
Схоже, втративши купу ринків, 💻 раптово збагнула, що було б непогано мати офіційні байндінги до інших мов окрім 💻 та 💻, і хтось там у них написав кастомний нейтів хост під .NET.
Можливо, #QML — це наразі одна з найвагоміших причин, чого я досі тримаюся C++. Я просто дуже полюбляю робити UI, і саме завдяки цим двом мовам я здатен досягати найшвидших та найякісніших результатів. Python відштовхує своєю повільністю виконання та труднощами розповсюдження готових програм. А під інші мови всі байндінги сумнівної якості й написані хтозна-ким.
Це не значить, звісно, що я зараз раптово перейду на 💻, але може вони нарешті подивляться в бік чогось зручнішого та сучаснішого.
显示 1 - 24 共 33
登录以解锁更多功能。