Стендап Сьогодні

Що я зробив, що я хочу зробити, і що це все значить.
Повсякденні здобутки в форматі стендапу.
Детальніше в статті

Підписатись на RSS · 📢 Канал в Telegram @stendap_sogodni

12.10.2024

Про айтівські неологізми

Потрапила на очі ця стаття про переклади айтівських слів. (Привіт, Стасе!) Вона мене трохи затригерила, принаймні тому, що переклад термінів мені заради цього каналу доводиться робити щодня. Мої думки з досвіду:

Мова — жива. Нові слова запозичуються завжди. Нові уявлення зʼявляються завжди — та потребують нових слів або нового змісту старих слів. Особливо в наш час та особливо в нашій галузі.

Слово “стендап”, бачите, навіть двічі імпортоване з різними змістами. Та йому просто немає перекладу, бо в цього слова свій зміст: це не буквально “нарада стоячи”, а щоденна нарада за методологією Agile. Тому адресатові доведеться вгадувати, що саме криється за “нарадою стоячи”. (Скажи мені “в нас нарада стоячи” та я здивуюся - в нас зазвичай всі сидять.) Або що таке “запит на витяг”. Або “фіксація”. (До речі, це справжній термін — раджу пройтися по статті Вікіпедії про Git - там багато цікавого.)

Або “баг”. Чи це “помилка”? Ні — помилка то “error”, і “хиба” теж. Чи це “вада”? Вада — надто широко, це “flaw”. А баг це суцільно нове поняття. Хочете приклад? “Вадою Sentry є регулярні баги в збиранні помилок.”

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

Що з цим робити? Раджу водночас послабити свої очікування від інших та зміцнити пильність до власної мови. Більше спілкуватися, читати та писати українською мовою. Ergo, цей канал. А якщо хочеться шукати цікаві переклади, раджу спільноту Словотвір, згадану в статті вище.


11.10.2024

Javascript for Mac Automation (JXA)

Зробив собі сьогодні шорткат Hyper+J для копіювання поточної задачі з Jira у вигляді AB-123: перезібрати ядро - бо саме такий формат мені потрібний у тексті коміту, та доводиться його писати щоразу вручну.

В мене вже є AppleScript для витягання вкладки. Та в назві вкладки всі дані є, тільки в вигляді [AB-123] перезібрати ядро - JIRA. Ніби перетворити в потрібний вигляд тривіально, втім, в самому AppleScript немає регулярних виразів (та перетворення рядків взагалі виглядають дико). На StackOverflow радять викликати sed. 🥶

Натомість я згадав, що окрім AppleScript, на macOS можна робити автоматизацію звичайнісіньким JavaScript. В якому є звичайнісінькі RegExp. Залишилося перекласти скрипт, додати регулярку та повісити через BetterTouchTool на комбінацію клавіш в Safari. Успіх!

Щодо автоматизації на JavaScript, її можна запускати хоч з термінала командою osascript -l JavaScript copy_jira_issue.js. Єдине, чим вона мені не подобається — синтаксис команд доводиться перекладати з документації з AppleScript. Ось, наприклад, в цьому скрипті є команда app.setTheClipboardTo(). Ніхто в JS так функції не називає — проте це адаптація команди set the clipboard to з AS, де вона читається “як людська мова”. Бо як я розумію, весь цей API здобувається автоматично з тих самих “словників”.

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


10.10.2024

Пост нелюбові до Sentry

Ні, з одного боку я Sentry дуже люблю та додаю до всіх своїх проєктів. Раніше були конкуренти, а тепер не залишилось — принаймні для мене. Особливо мені як поліглоту подобається підтримка всіх уявних мов та фреймворків. А ще вони відкрили код власного сервера, тож його можна розгорнути для себе та не платити.. кхм, тобто замість тарифів Sentry платити системному адміністратору. В мене в самого колись був на сервері Errbit - це був такий альтернативний бекенд для Airbrake, коли він був ще Hoptoad.

Але… Гадаю, Sentry створив для мене більше проблем за всі інші сервіси. Що особливо обурює, так це те що Sentry виконує абсолютно побічну функцію та, на перший погляд, невелику: це ж лише збирачка помилок!

Культура розробки Sentry нагадує молодий проєкт з відкритим кодом, а не недешевий продукт B2B. Зміни вносяться несподівано та документація не завжди збігається.

З Sentry для Ruby в нас була ситуація, що нова версія вступала в нескінченну рекурсію під час збору контексту. Та виводила з ладу весь сервер! Чого збирачка помилок ніколи не повинна робити, то це створювати нові помилки.

Для JavaScript є з десяток пакетів, які покривають різні обставини: Node.js, браузер, React, React Native… якщо у вас в проєкті є декілька “смаків” JavaScript, бажаю успіхів в поєднанні пакетів. Причому звісно ж проблеми доведеться побачити не відразу, а коли відбудеться збіг обставин.

От, останнє що трапилось — вони оновили всі пакети, окрім @sentry/integrations. Та він, як бачу, взагалі зник з репозиторію. Але офіційно цей пакет все ще радять використовувати для React Native. Хоч він не працює: щось помінялося в аргументах функцій. Ой, а документацію планують оновити, вже чотири місяці як. Я поки придумав тільки повністю прибрати ті інтеграції — з втратою важливого функціоналу, але принаймні без помилок.

Знаєте щось дійсно краще? Бо я майже готовий переїхати.


09.10.2024

Віртуалізація для людини-корпорації

Apple (а точніше, Євросоюз) нещодавно порадували тим, що всім продавцям в App Store потрібно буде вказувати контактну інформацію — включаючи навіть поштову адресу. Очевидно, що особисті дані публікувати це божевілля, тому розшукав рішення для таких як я:

Буду радий почути ваші варіанти!


08.10.2024

Вхідні

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

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

Тому жодна програма не виконувала мої очікування по обробці вхідних. Довелося доробити свою. Замість нотаток я зробив перелік “вхідних зон”, де ці вхідні можуть накопичуватись. Для кожної зони відстежується час останнього спустошення, та якщо він не сьогодні — час стає червоним, а в сайдбарі з’являється лічильник неперевірених інбоксів.

Таким чином, я не забуду обробити й Drafts, і пошту, і всі інші місця. До речі, оцей Open на ілюстрації — це не статичне посилання, а текст Markdown - воно відкриває застосунки за їхньою URL схемою, наприклад, drafts://. Причому у SwiftUI вбудований рушій Markdown; для статичних рядків він працює сам собою, а змінні достатньо завернути в LocalizedStringKey. Мабуть, для продукту я б таке ризиковане рішення не взяв, але для себе дуже зручно мати Markdown під рукою.


07.10.2024

Перці

🌶️ Найгостріші почуття сьогодні від того, що завершив обробку частини врожаю халапеньйо. Якого цього року вродило нівроку. Якщо захочете спробувати, насіння халапеньйо та інших гострих перців є в магазині Добродар. Хоча по садовій частині я не майстер, тут дякувати мамі. Технічно, це не складніше ніж вирощувати звичайний перець, просто в нас класичні пекучі сорти як халапеньйо чи хабанеро не популярні, як і гострі страви взагалі.

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

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

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

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

Можна робити соуси — якщо на оцті, то соус все одно повинен кілька місяців стояти, щоб поєднався смак. На мою думку, соус має сенс робити на свій смак — додавати оцет, сіль, цукор/мед, спеції, часник… чи навіть будь-які овочі та фрукти. Те, що подобається. Ласкаво прошу до /r/hotsaucerecipes.

Ферментація (тобто киснення) - то вже для сильних духом, практично тваринництво. Пліснява — це страшно. Але багато відомих соусів саме квашені — серед них Табаско та Шрірача. Бо киснення, скажімо так, відкриває можливість цікавого, складного смаку. Про це теж є сабреддіт.


06.10.2024

Розробка для себе

Памʼятаєте, в мене є стилі для канви та мікрозастосунок для ведення справ? А ще я тільки-но писав, що планувати краще на канві? Сьогодні подружив всі ці ідеї та додав до застосунку можливість прочитати з привʼязаного до проєкту файлу канви всі невиконані задачі, та за погодженням додати їх до списку наступних дій.

Технічна реалізація досить проста: скрипт для експорту канви в список я вже писав, залишилось портувати його на Swift та додати необхідний мінімум UI. Та ще менший мінімум моделі: відображення ID вузлів канви в ID дій, щоб памʼятати, які з них вже імпортовані. О, а ще щоб звʼязати проєкт з канвою, я шукаю в нотатках до проєкту URL від Obsidian, розбираю його та отримую імʼя файлу — який потім можу знайти в файловій системі, знаючи шлях до бази Obsidian.

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

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

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


05.10.2024

Найкраща зустріч

Цими днями в мене трапилась просто найкраща зустріч-обговорення. Вона закінчилася раніше запланованого, з новим розумінням та корисним висновком. Що цьому посприяло, на мою думку:


04.10.2024

Не займайся плануванням в списку задач

Пʼятничний пост про планування. В мене типова ситуація, коли намагаюся відразу від постановки цілі (задачі, проєкту, доручення) перейти до вигадування кроків до неї. Тобто відкрити порожній список та писати: задача 1, задача 2…

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

Наприклад, потрібний мені письмовий стіл. Я можу легко написати наступну дію “шукати стіл”. Але який саме стіл? Які розміри, матеріали? Поки цього не зʼясувати, “шукати стіл” просто неможливо. Що на практиці проявляється як ментальний спротив та небажання її робити. Тож така дія сидітиме невиконаною, аж поки я не помічу, що її треба додумати.

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

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


03.10.2024

BetterTouchTool

Якщо в тебе мак та хоч трохи бажання поміняти керування під себе, тобі обовʼязково потрібний застосунок BetterTouchTool. Це справжній комбайн з багатьма входами — від натискань на зони тачпаду (звідки назва) до автоматизації та керування з телефону — та виходами — від емуляції натискань до запуску скриптів.

Сьогодні мені захотілося, щоб в Drafts посилання відкривалися за Cmd+click, як це роблять інші редактори. Однак в Drafts для того особливий режим “Link mode”. Хоча ні, знайшов ще пункт контекстного меню “Open Link”. Щоб не псувати мʼязову памʼять, призначив в BTT для Drafts на Сmd+click операцію “Обрати пункт контекстного меню Open Link”. Готово!

BTT - це дійсно один застосунок на всі потреби. Я його вже згадував 1 2 3 4 5 6 разів. І ще тільки нещодавно зробив, щоб Cmd+пробіл в iPhone Mirroring відкривав пошук по айфону. Особливо мені подобається, що завдяки BTT можна впевнено нормалізувати поведінку різних застосунків, щоб не згадувати, де знаходишся.

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

А ще для ігор в мене Hyper+F змінює призначення функціональних клавіш з медіа на звичайні. Там цілий шел-скрипт запускається. (Хоча, до речі, я давно звик привʼязувати Quick Save на \, а Quick Load на /.)