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

Мої емоджі:
https://t.me/addemoji/AdaptiveDevIcons
https://t.me/addemoji/VehicleBrands
Download Telegram
Media is too big
VIEW IN TELEGRAM
Сів я, значить, у суботу надвечір спробувати себе у програмуванні мікроконтролерів, чим останній раз займався років 14 тому на лабах в універі. Вдалося навіть поблимкати світлодіодом.
👍3
Media is too big
VIEW IN TELEGRAM
А за вчора зробив робочий прототип свого нового проєкту. Це мої майбутні кухонні ваги з бездротовим дисплеєм. Кодова назва — Терези. (Так, я знаю, що терези — то інший тип ваг, але слово крутецьке).

Калібрування пачкою печива відбулося успішно.

Думав, писатиму на Python, але почав осьо на плюсах і чогось прям кайфонув.
👍10🔥5
Сьогодні у нас не Pathfinder, а так званий «ваншот» у «Поклик Ктулху». Тож я вчора витратив трохи часу, щоб підготуватися.

На (першому) зображенні те, що я отримав від ДМа — PDF-ку зі статами готового персонажа. А на (другому) відосі — те, що цього разу вийшло у мене.

Процес створення був приблизно наступним:

Спочатку я заскріншотив портрет з PDF. В кращій якості знайти це фото не вдалося, тож я закинув його у #Photoshop та зробив upscale і розфарбування за допомогою тамтешньої ШІ-шки. Генеративною ШІ-шною заливкою додав якесь тло до фото.

В такому вигляді перекинув його у #Figma, де зробив невдалий закос під фотокартку (білі поля + тінь) та додав імʼя персонажа (шрифт Copperplate ніби пасує).

Далі знайшов на Unsplash.com фотографію старого паперу, закинув у фотошоп, видалив тло, перекинув у фігму.

Павучу діаграму мені ліньки було малювати, тож я попросив ШІ-шку (#Claude) згенерити мені код на #Python з використанням Plotly, який би малював потрібний мені radar chart. Закинув цей код в #Jupyter. Розбиратися з кольорами в тій лібі було впадлу, а ШІ-шка мені якусь хєрню парила, тож натомість я просто експортнув результат в SVG з того ж блокноту та теж закинув у фігму.

Фігма на ізічах імпортує SVG як рідні векторні меші, тож вже там розфарбував, як мені було треба, налаштував товщину ліній тощо.

Поклацав різні шрифти у фігмі та натрапив на Kyiv*Type Serif. Щось він мене приколов, тож вирішив використувувати його для всього тексту (окрім імені, так).

На цьому ліва частина була готова.

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

Kyiv*Type — це варіабельний шрифт, тож довелося проапгрейдитися до Qt 6.7, адже вони тільки-но додали підтримку нещодавно.

Потім щось раз-два, наговнячил туди-сюди (завдяки нашій з друганом лібі easy.reload), і вуаля! Як вам? ))

Мені особисто права нижня чверть не дуже, але як для прототипу — вельми збс вийшло. Я загалом задоволений.
🔥61👀1
Просто подивіться оце ☝️

Я називаю себе програмістом, що інколи щось дизайнить, а мій знайомий є дизайнером, що інколи кодить (але обидва працюємо менеджерами 😅), і майже кожна розмова з ним додає мені якихось корисних інсайтів. Ось вчора він приніс мені відос.

Коли я кажу людям, що девелоперські #тулзи не мусять бути лайном, вони мені у відповідь:
🤪 «IDE не потрібна» 🤪 «я грепаюсь по логах» 🤪 «а що не так з гітом?» 🤪 «проєкт збирається всього лише за 40 хвилин на тредріппері» 🤪 тощо 🤪

Тим часом компанія з трьох людей, що робить дуже офігезні ігри:
• оновлюють асети без перезавантаження програми;
• компілюють код у файлі на 13к рядків(!) на кожне натискання клавіші(!!) та оновлюють його теж у рантаймі(!!!)
• у будь-який момент можна поставити брякпоїнт будь-де та пройтися по кроках вперед та назад!
• завдяки хот-релоаду кода, вони компілюють код для профайлінга за потреби вже на запущеній програмі;
• всі дії з моменту запуску програми зберігаються у повністю reproducible послідовність включно зі всіма рекомпіляціями та перезавантаженнями коду або ресурсів, яку можна переносити на інші компи, й воно працюватиме;
• можна тегнути будь-яке місце в коді якимсь додатковим контекстом (timestamp, наприклад), щоб потім швидко знайти саме те місце в коді та саме той момент часу, коли це трапилося;
• все це інтегровано з білд-системою та системою контролю версій.

Я хз, що тут ще додати. Мій поточний тулсет на тлі цього — це наче бричка з кіньми поряд з зорельотом.
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5🤯2
Cіпласпластик
#Ідея для стартапа: сервіс, в який ви логінитеся своїм обліковим записом #Spotify, щоб він щотижня пробігався по «Тижневій добірці», перевіряв за допомогою #ШІ-шки кожного виконавця, чи не має той звʼязків з рашкою, та автоматично дизлайкав тих, хто має.…
Окей, трохи навчив Perplexity зʼясовувати походження та звʼязки виконавців. Потестив на якихось назвах, що знайшов у #Spotify — не вгадало тільки CHAINY. (ДахаБраха та Ragapop — це 🇺🇦 звісно, а Paul Sabin ніби хвранцуз).

Цікаво, що на цій задачі Claude 3 Opus показує себе вкрай жахливо, а от GPT-4 Turbo ніби норм.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👀1
This media is not supported in your browser
VIEW IN TELEGRAM
Нефігова така анімація іконки burger menu.

Зазвичай всі пхають анімації абикуди, не розуміючи нащо, й чисто тому, що інші так роблять. Але тут це має сенс, бо це сайт ігрової компанії. Прикольно 🙂

UPD: Важливий момент до речі, що вона програється на сайті всього один раз, а не постійно мерехтить в очах, програючись по колу.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Цікаво, як за допомогою #emoji виразити прізвище автора вірша 🤨 (Так, я ще той жартівник 😁 Проте вірш ще зі школи памʼятаю, бо саме він мені на екзамені трапився).

Взагалі emoji — штука доволі дивна, як на мене. Я проґавив їхнє глобальне пришестя, бо, мені здається, це завдяки айфону відбулося (хоча вікі пише, що гугл першим звернув на них увагу та інтегрував у GMail). А коли вони зʼявилися на андроїді, то я довго впирався та не хотів користуватися.

Річ у тім, що emoji містять у собі купу якогось непотребу, й одночасно там бракує багатьох важливих штук. У часи #ICQ я користувався найкращим чат-клієнтом — Miranda IM, і навіть тамтешні стандартні смайли (емотікони, точніш) були більш експресивні. Ну а краще за анімовані скайпівські, здається, досі ніхто нічого не зробив. У Microsoft взагалі зі смаком все в порядку, тож я emoji також їхні використовую, як ви давно зауважили.

Та мова не про це. Емодзі — далеко не перша спроба «стандартизувати» спілкування символами за останні роки, але найуспішніша. Наприклад, ще була iConji, яка проіснувала з 2010 до 2012.

Та мало хто знає (а ті хто знає, вже забули), що ще у 2004 зʼявилася така штука як Zlango 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Cіпласпластик
Цікаво, як за допомогою #emoji виразити прізвище автора вірша 🤨 (Так, я ще той жартівник 😁 Проте вірш ще зі школи памʼятаю, бо саме він мені на екзамені трапився). Взагалі emoji — штука доволі дивна, як на мене. Я проґавив їхнє глобальне пришестя, бо, мені…
Отож зустрічайте, піктографічне письмо моєї юності 😄

Zlango, створений ізраїльською компанією, як і #ICQ до речі, спочатку був плагіном для останнього, але згодом зʼявилася й окрема програма для телефонів. Чи може навпаки все було.

Так чи інакше, в Україні серед мобільних операторів Zlango тільки Київстар розповсюджував: там на djuice можна було майже на халяву завантажити це з WAP-сайту, а потім слати замість смс-ок — але у мене був JEANS 😐

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

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

А гугл-он ще вісім років тому стверджував, що їхня #ШІ-шка в Google Translate буцімто виробила свою проміжну мову.

Тож може зараз з LLM справа краще піде. Але гарантую, що скоро ще схожі спроби будуть. А може й вже є )
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41😁1
Мене аж тіпає, коли пишуть C/C++, поєднуючи дві різні мови, відмінні не тільки концептуально, але й синтаксично (так!). Щось я не бачу, щоб писали C/Objective-C або QBasic/Visual Basic десь у вакансіях.

З очевидних відмінностей є, наприклад, автоматичне приведення в сішці void-вказівника void* до вказівника на будь-який інший тип, наприклад, int*. А неявні касти в результаті приносять значно більше болю, ніж необхідність робити це явно. В Haskell немає неявних приведень типу, і жоден розробник з десяти у світі від цього не вмер.

Але у зворотному боці я також отримав декілька WTF-моментів. Наприклад, в C++ можна написати
int i = 0; 
(i = 10) = 42;

і воно це схаває, бо в C++ operator= повертає lvalue, але в C — ні, тож там це не спрацює. Це ж буквально один з пунктів, на які я жалівся у статті. Неприємно здивований.

Це з цікавого. Кажуть: «Майже будь-який код на C може бути скомпільований як C++» — проте не кажуть, що це ще не гарантує його коректність. Наприклад, в C sizeof('a') повертає розмір int, а в C++ — розмір char 🥱

Короч, між C та C++ ще безліч «прикольних» відмінностей. Аж на цілу пдф-ку назбиралося.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14😁1🤓1
Читав днями допис (до речі дуже подобається канал, рекомендую!), де чувак пише, як він підходить до завантажень відео з вебсайтів. А у мене як раз була подібна ситуація, коли я теж хотів щось злити з сайту, а там відоса як такого не було, і щось я не второпав, як це зробити.

Так ось я згадав, що то було. Дружина колись давно купила курс, який хоститься на сайті Gurucan (який, схоже, має росіянське коріння до речі), а ті прям хизуються своїм video content protection 🙄

Короч. Чувак своїм дописом мене надихнув розібратися. І він мав рацію! Мені як не веб-девелоперу трохи складніше, але я посидів на вкладці Мережа в девтулах, познаходив там якісь лінки. Спочатку думав взагалі просто дампанути з девтулів сесію та парсити її, але згодом знайшов там виклики API. Після логіну прилітає токен, який можна потім просто передавати в куках разом з User-Agent, і все працює.

Усі відоси розділені на шматки по 4 секунди й лежать на CDN, де також є *.m3u8 плейліст, по якому воно їх і збирає. Я роблю те саме: завантажую всі шматки локально та комбіную їх ffmpegʼом.

Написав все на #Nu (так, це мова в #Nushell) з використанням вбудованих засобів, тож єдина зовнішня залежність — це, власне, ffmpeg (жодних блядь jq!). Дуже подобається, що все статично типізоване та компілюється, тож ще до виконання отримуєш пачку помилок.

І вкотре наголошую, в якому я захваті від передачі обʼєктів через пайп. Є, наприклад у мене команда з отакою сигнатурою:
def "api get" [url?: string]: [nothing -> record, string -> record] { 
...
}

Необовʼязковий параметр — це url, щоб можна було викликати отак:
api get https://some.domain/api/call

Чому необовʼязковий? Бо натомість URL можна передати через пайп. І саме про це каже тип цієї команди, який можна читати так: якщо через пайп приходить nothing, то команда поверне record (але в цьому випадку треба вказати url, що на жаль в сигнатурі не відображене), і якщо через пайп приходить string, то також повертає record. Жодні інші типи через пайп не прийматиме. Тож альтернативний виклик отакий:
'https://some.domain/api/call' | api get

При цьому авжеж тепер ліва частина може бути аутпутом з іншої команди. За бажання структуру record, що повертається, також можна описати в типі, якщо вона заздалегідь відома.

Лайна в процесі також похавав. В якийсь момент мій код почав видавати отаку помилку:
  × Variable not found
╭─[~/megamodule/mod.nu:137:1]
137 │
138 │ ╭─▶️ api purchases | each {|p|
139 │ │ api course $p._id | download course
140 │ ├─▶️ }
· ╰──── variable not found
141 │
╰────

І пиздець — ані туди, ані сюди. Причому це тупо в main на верхньому рівні. Довелося коментувати код шматками, щоб докопатися до суті. Врешті виявилося, що десь в іншому модулі на хз якому рівні вкладеності я не перевірив одну зі змінних на null перед використанням 😵‍💫

Втім все одно я в захваті! Nushell — вогонь, причому він активно розвивається.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👀1
#TIL в С++ є спецові функції для порівняння знакових та беззнакових чисел (починаючи з C++20 😂).
Please open Telegram to view this post
VIEW IN TELEGRAM
👀1
Свій перший код на #BASIC я написав в шість років (А ви? Розкажіть, може?) на якомусь радянському клоні спектрума, хоча в ті часи цього ще не усвідомлював. Я був у «компьютерно-англійському» першому класі, проте, вже за півтора року він став звичайним, а інформатику нам перестали викладати. Свій же компʼютер у мене зʼявився аж за вісім років від першої написаної програми — коли мені було 14.

Жили ми доволі бідно, тож у мене не те що компʼютера не було, а навіть «денді», не кажучи вже про «сегу». Якийсь час був Brick Game aka «тетріс», який на жаль зник (найбільш ймовірно його спиздив сусід по поверху, мати-алкоголічка якого варила ширку для наркоманів).

Але потяг до компʼютерної тематики у мене з дитинства. Тож коли була змога, я ходив по друзях, у котрих вже були компи (дякую вам, до речі 🥰) або хоча б приставки. Решту ж часу з розваг у мене були походи в компʼютерні магазини, де можна було подивитися на свіжі технологічні надбання, а також набрати прайс-листів, щоб скласти собі черговий (чи не щотижневий) конфіг своєї мрії. В деяких магазах мене навіть в обличчя вже знали 😁

А ще існувала радянська книжка «Энциклопедия профессора Фортрана» (росіянською звісно). У мене її не було, але мені друган давав почитати, тож я її мільйон разів прочитав, мабуть.

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

Отже, це все був вступ. Я просто натрапив на сайт з паперовими (кольоровими!) моделями різних старих пристроїв, і мені згадалося ) Треба якийсь гештеґ на кшталт «дід знов забув про таблетки».
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8😁31❤‍🔥1
😩
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13🔥1
Якось розмовляли з друганом про можливість зробити GUI/TUI для роботи з логами, зокрема в JSON-форматі.

І якщо ви досі не перейшли на #Nushell, як це зробив я, то вам може стати в пригоді його плагін для Neovim, що дозволяє наживо фігачити jq-запити. Не забудьте поставити зірочку на репу.
🔥6👍3👀1
Зараз буде багато тексту.

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

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

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

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

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

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

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

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