<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Здоровий глузд: дописи з тегом automator</title>
<link>https://blog-archive.alexkolodko.com/tags/automator/</link>
<description>Олександр Колодько. Інформаційний та навігаційний дизайнер. Співзасновник команди ARC, співзасновник та головний дизайнер в Агентах змін (А3). Пишу про дизайн і цікаве мені · alexkolodko.com · wayfinding.systems</description>
<author></author>
<language>uk</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>Олександр Колодько. Інформаційний та навігаційний дизайнер. Співзасновник команди ARC, співзасновник та головний дизайнер в Агентах змін (А3). Пишу про дизайн і цікаве мені · alexkolodko.com · wayfinding.systems</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Швидке розпізнавання тексту з екрана чи файлів у macOS</title>
<guid isPermaLink="false">166</guid>
<link>https://blog-archive.alexkolodko.com/all/automation-shortcuts-macos-ocr/</link>
<pubDate>Sun, 25 Jan 2026 19:28:43 +0200</pubDate>
<author></author>
<comments>https://blog-archive.alexkolodko.com/all/automation-shortcuts-macos-ocr/</comments>
<description>
&lt;p&gt;Ті, хто користуються macOS починаючи з версії 11, могли помітити, що у Preview є можливість виділяти та копіювати текст з зображень. У систему вбудований непоганий розпізнавач тексту (OCR). Але не всі знають, що його можна викликати не тільки у Preview, а застосувати до будь-чого.&lt;/p&gt;
&lt;p&gt;За допомогою Shortcuts я створив два сценарії розпізнавання тексту: з виділеної частини екрана, як при скриншоті, та з вибраного файлу у Finder. Результат копіюється образу в буфер і його можна образу вставляти куди треба. При цьому можна також додати гарячі клавіші для виклику кожного, наприклад, для розпізнавання з екрану у мене це ⌘7.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automation-shortcuts-macos-ocr-1.png" width="2400" height="1564" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/automation-shortcuts-macos-ocr-2.mp4#t=0.001" width="2560" height="1604.4444444444" controls alt="" /&gt;

&lt;/div&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/automation-shortcuts-macos-ocr-3.mp4#t=0.001" width="2560" height="1604.4444444444" controls alt="" /&gt;

&lt;/div&gt;
&lt;p&gt;Нижче викладаю самі файли Shortcuts, які можете додати собі. Продуктивної роботи всім 🦾&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.icloud.com/shortcuts/dd40af84219846368d24a2222b110d4b"&gt;Розпізнавання з частини екрану&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.icloud.com/shortcuts/295019a1b8a14a1095ac99f5fa961a62"&gt;Розпізнавання з файлу&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>Автоматизація дизайну з ChatGPT. Частина 2: скрипти для InDesign, Figma, Google Docs, Automator</title>
<guid isPermaLink="false">94</guid>
<link>https://blog-archive.alexkolodko.com/all/design-automation-with-chatgpt-part2/</link>
<pubDate>Fri, 24 Mar 2023 22:37:31 +0200</pubDate>
<author></author>
<comments>https://blog-archive.alexkolodko.com/all/design-automation-with-chatgpt-part2/</comments>
<description>
&lt;p&gt;Продовжую експерименти написання простих скриптів з допомогою ChatGPT. Тут &lt;a href="https://blog.alexkolodko.com/all/adobe-scripting-with-chatgpt/"&gt;перша частина&lt;/a&gt; зі скриптами для Adobe Illustrator.&lt;/p&gt;
&lt;h2&gt;1. Заміна шрифтів у InDesign&lt;/h2&gt;
&lt;p&gt;Перше, що захотілося зробити, це перенести скрипт з Ілюстратора в Індизайн (хоч скрипти й схожі, але у програм всередині різна специфіка).&lt;/p&gt;
&lt;p&gt;Тож спочатку я спробував подібними до попередніх запитами згенерувати скрипт. Але з 5-6 спроб робочого коду не вийшло. Тому далі я знайшов &lt;a href="https://community.adobe.com/t5/indesign-discussions/font-replacement-scripting-javascript/td-p/11021763"&gt;у спільноті Адоб&lt;/a&gt; шматок коду схожий на те, що мені треба.&lt;/p&gt;
&lt;p&gt;Але для його використання для різних накреслень і шрифтів не вистачало масиву значень на початку та циклу його виконання. Тому я скопіював код і попросив ChatGPT додати мені ці модулі. І за кілька уточнень вийшло робоче рішення.&lt;/p&gt;
&lt;p&gt;Далі зробив ще одну версію, попросивши додати виклик модального вікна, в яке можна ввести руками потрібні назви шрифтів. І він мені це теж зробив:&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/automation-1-1-2-indesign-x4-noaudio.mp4#t=0.001" width="2560" height="1600" controls alt="" /&gt;

&lt;div class="e2-text-caption"&gt;Створення скрипту заміни шрифту в InDesign&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Завантажити скрипти:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.dropbox.com/s/lgcoaglq2yl7lkn/Font%20Replacer%20INDD.jsx?dl=0"&gt;Версія&lt;/a&gt;, яка заміняє усі шрифти у всіх фреймах;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dropbox.com/s/sh4p04jj41wq4j9/Font%20Replacer%20INDD%20Selected.jsx?dl=0"&gt;Версія&lt;/a&gt;, яка заміняє шрифт лише у виділеному тексті;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dropbox.com/s/zdouo1ppa8sq9ka/Font%20Replacer%20INDD%20SelectedORNot.jsx?dl=0"&gt;Версія&lt;/a&gt;, заміняє шрифт або у виділених фреймах, або в усіх;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dropbox.com/s/6ifotvcavyeinit/Font%20Replacer%20INDD%20with%20window.jsx?dl=0"&gt;Версія&lt;/a&gt; з двома вікнами введення назви старого і нового шрифтів;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dropbox.com/s/eiazxfnj92d09ze/Font%20Replacer%20INDD%20ww2.jsx?dl=0"&gt;Версія&lt;/a&gt; з одним вікном, в якому можна ввести кілька шрифтів.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;1.2. Заміна стилів у InDesign&lt;/h2&gt;
&lt;p&gt;Окрім зміни шрифтів, попросив придумати скрипт, для заміни одних стилів на інші та ще попросив додати вікно, в якому ці назви можна ввести. Отримав &lt;a href="https://www.dropbox.com/s/l252xyt2flartv8/Change%20style%20with%20one%20window.jsx?dl=0"&gt;такий скрипт&lt;/a&gt;.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/indesign-1-2-1-changestyles-x2.mp4#t=0.001" width="2560" height="1600" controls alt="" /&gt;

&lt;div class="e2-text-caption"&gt;Скрипт для InDesign, який заміняє один стиль на інший&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;А далі попросив замість полів для введення тексту зробити спадні списки зі всіма наявними стилями у документі. Але скрипт сходу не запрацював, але його можна об’єднати з попередніми.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/indesign-1-2-2-changestyles-dropdowns-x2.mp4#t=0.001" width="2560" height="1600" controls alt="" /&gt;

&lt;/div&gt;
&lt;h2&gt;2. Збереження Google Docs у тій самій теці на Драйві&lt;/h2&gt;
&lt;p&gt;У мене є потреба періодично зберігати поруч з Гугл Документом також і PDF, який я потім можу відправити. При збереженні через меню документів сам документ у мене завантажується у Downloads, як і решта файлів. Але потім мені потрібно знову завантажувати PDF у ту саму теку на драйв. Не складно, але це витрата часу.&lt;/p&gt;
&lt;p&gt;Шукав приклади скриптів, які  б могли зберігати PDF у ту саму теку, але робочих не знайшов. І от попросив ChatGPT запропонувати мені такий скрипт. І з першого разу отримав робочий варіант:&lt;/p&gt;
&lt;pre&gt;
function onOpen() {
  var ui = DocumentApp.getUi();
  ui.createAddonMenu()
      .addItem(’Convert to PDF’, ’convertDocToPDF’)
      .addToUi();
}

function convertDocToPDF() {
  var docFile = DocumentApp.getActiveDocument().getId();
  var doc = DriveApp.getFileById(docFile);
  var pdfFile = DriveApp.createFile(doc.getAs(’application/pdf’)).setName(doc.getName() + «.pdf»);
  var parentFolder = doc.getParents().next();
  pdfFile.makeCopy(parentFolder);
  pdfFile.setTrashed(true);
}

&lt;/pre&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/google-script-with-chatgpt-x2.mp4#t=0.001" width="2560" height="1600" controls alt="" /&gt;

&lt;/div&gt;
&lt;p&gt;Також ChatGPT описав інструкцію, як цей скрипт опублікувати, щоб він працював не тільки у конкретному документі, але це виявилось не так просто, як зробити скрипт 😅.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="2400" data-ratio="1.6"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-2-1.png" width="2400" height="1500" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-2-2.png" width="2400" height="1500" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;3. Транслітерація тексту в Figma&lt;/h2&gt;
&lt;p&gt;Колись для транслітерації назв зробили разом з програмістами простий сайт з простим JS, якій заміняв літери на інші за певними правилами. Потім з цього створили скрипти для AI та ID. А потім я стикнувся з такою з задачею у Фігмі, але робочих рішень не знайшов. Щось покрутив, але кинув, бо моїх знань було недостатньо.&lt;/p&gt;
&lt;p&gt;І от спробував згодувати цю задачу ChatGPT. Взяв увесь наявний скрипт, як приклад, і попросив придумати, як з цього скрипту зробити скрипт для Фігми. Спочатку запропонований код транслітерував всі тексти на сторінці. Через уточнення він це робив для виділеного тексту, а якщо не виділений, то вже для всього.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/automation-3-figma-x2.mp4#t=0.001" width="2560" height="1600" controls alt="" /&gt;

&lt;/div&gt;
&lt;p&gt;І у першому варіанті цей код навіть працює, транслітерує, лишилось тільки допиляти для виключень і різних випадків. Далі вже можна туди додати якийсь інтерфейс за потреби. Тест вважаю вдалим.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="2400" data-ratio="1.6"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-3-1.png" width="2400" height="1500" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-3-2.png" width="2400" height="1500" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-3-3.png" width="2400" height="1500" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-caption"&gt;Код транслітерації для Фігми від ChatGPT&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;4. Створення регулярних виразів для GREP / RegEx&lt;/h2&gt;
&lt;p&gt;Про грепи (або регулярні вирази, або regex) розповідав у лекції і все хотів написати детальну статтю зі всіма посиланнями, які назбирав, але все не знаходив час. GREP дуже потужна штука, але в неї був дуже високий поріг входу, щоб розуміти як будувати потрібні правильні вирази.&lt;/p&gt;
&lt;p&gt;І от тепер з ChatGPT цей поріг можна вважати зниженим, бо він дуже гарно конструює навіть складні вирази.&lt;/p&gt;
&lt;p&gt;Наприклад, давайте в Індизайні після всіх прийменників додамо нерозривні пробіли у всьому тексті через GREP-стилі. Для цього потрібно знайти у тексті всі прийменники. Тож створюємо стиль для символів без перенесень (no break) та питаємо у ChatGPT список всіх прийменників у вигляді регулярного виразу.&lt;/p&gt;
&lt;p&gt;Він розуміє українську і віддає згенерований вираз вже у потрібній формі. Єдине що цей regex не зовсім підійде у Індизайн, тому уточнюємо що це має бути саме GREP для Індизайну і отримуємо робочий запит.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/automation-4-1-indesign-grep-find-x4.mp4#t=0.001" width="2560" height="1600" controls alt="" /&gt;

&lt;/div&gt;
&lt;p&gt;Так само можна конструювати грепи, які знаходять прізвища та ініціали, одиниці вимірювання, дати та місяці, номери телефонів у різних видах тощо. Далі потім знайдені дані (одразу всі, в усьому тексті) можна або переформатовувати або задавати їм потрібний стиль.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="2400" data-ratio="1.6"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-4-1.png" width="2400" height="1500" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-4-2.png" width="2400" height="1500" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-4-3.png" width="1694" height="950" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-4-4.png" width="1650" height="1936" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-4-5.png" width="1614" height="1074" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-4-6.png" width="2400" height="1500" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-4-7.png" width="2400" height="1500" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-4-8.png" width="2400" height="1500" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-4-9.png" width="1604" height="1176" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-caption"&gt;Приклади різних регулярних виразів&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Регулярні вирази — дуже технічно-орієнтований інструмент. Тому тепер до цього інструменту є людино-орієнтований інтерфейс, який трансформує ваш запит у зрозумілу машині форму.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/automation-4-2-indesign-grep-replace-x4.mp4#t=0.001" width="2560" height="1600" controls alt="" /&gt;

&lt;div class="e2-text-caption"&gt;GREP заміни кириличних лапок латинськими&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;5.1 Зібрати відео зі скріншотів (з використанням ffmpeg)&lt;/h2&gt;
&lt;p&gt;Також в лекції згадував, що також у автоматизації дуже допомагають різні консольні команди (cli, command line interface), які заточені на певні дії. З ними така сама ситуація — щоб ними користуватись, потрібно розбиратись в прикладах та документації, що теж техно-орієнтованість.&lt;/p&gt;
&lt;p&gt;Тому тут можна теж ChatGPT використовувати, як посередника для пошуку потрібної команди з потрібними параметрами. Наприклад, маємо купу скріншотів зроблених автоматично з різницею у 4-5 секунд, з яких хочемо зробити скрінкаст.&lt;/p&gt;
&lt;p&gt;Для роботи з відео є потужна програма &lt;a href="https://ffmpeg.org/download.html"&gt;ffmpeg&lt;/a&gt;, яка працює з командного рядка. Тож попросив ChatGPT запропонувати команду для ffmpeg, яка б об’єднала картинки у відео. З першого разу отримуємо варіант, який на 100% працює та робить відео з заданою кількістю кадрів, які можна скоригувати.&lt;/p&gt;
&lt;pre&gt;
ffmpeg -framerate 30 -pattern_type glob -i ’/path/to/folder/*.jpg’ -c:v libx264 -pix_fmt yuv420p /path/to/output.mp4
&lt;/pre&gt;
&lt;p&gt;Таким чином не потрібні ніякі додаткові програми, для створення відео з картинок: за допомогою Автоматора робимо скріншоти, а через ffmpeg отримуємо відео.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/automation-5-1-x4.mp4#t=0.001" width="2560" height="1600" controls alt="" /&gt;

&lt;div class="e2-text-caption"&gt;Збір відео з окремих картинок&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;5.2 Компресія відео (з використанням ffmpeg)&lt;/h2&gt;
&lt;p&gt;Так само можна пошукати запити і на інші задачі з відео, наприклад, перезберегти з певною компресією чи зміною розміру, або прискоренням.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/automation-5-2-compress-video-x4-noaudio.mp4#t=0.001" width="2560" height="1600" controls alt="" /&gt;

&lt;/div&gt;
&lt;p&gt;Раніше я шукав налаштування команд на Stackoverflow, а зараз швидше спитати у ChatGPT. Приклади запитів.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="2400" data-ratio="1.6"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-5-2-1-compress-video.png" width="2400" height="1500" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/_automation-5-2-2-compress-video.png" width="2400" height="1500" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Компресія відео з ffmpeg&lt;/p&gt;
&lt;h2&gt;6. Зміна в наявному скрипті для Автоматора (Apple Script)&lt;/h2&gt;
&lt;p&gt;До попереднього пункту: для створення скрінкасту у мене був скрипт, який робив скріншот екрану і клав у потрібну теку в Дропбоксі, а потім зі скріншотів збиралося відео.&lt;/p&gt;
&lt;p&gt;Зараз Дропбокс змінив і виходить старий скрипт некоректно працює. Йти шукати у документації до AppleScript як змінити шлях було б довго. Тому скопіював наявний скрипт і попросив замінити шлях збереження скріншотів у теку /&lt;i&gt;Desktop&lt;/i&gt;.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;video src="https://blog-archive.alexkolodko.com/video/automation-6-applescript-x4.mp4#t=0.001" width="2560" height="1600" controls alt="" /&gt;

&lt;/div&gt;
&lt;h2&gt;7. Збереження в TIFF у Adobe Illustrator&lt;/h2&gt;
&lt;p&gt;Ще попросив зробити скрипт для швидкого збереження артборду у TIFF з заданим DPI. Отримав отакий варіант, який видавав помилку. Знайшов у спільноті Адоба відповідь зі схожою частиною, та побачив що один з параметрів замість IBM має називатись IBMPC, замінив, запрацювало. Тобто весь скрипт робочий, але помилка була в одному з параметрів. &lt;a href="https://www.dropbox.com/s/g6u54xerw8lg4v4/toTIFF.jsx?dl=0"&gt;Завантажити скрипт&lt;/a&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automation-7-1-w2400.png" width="2400" height="1500" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Збереження артбоду в TIFF 300dpi&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;8. OSM Overpass Query&lt;/h2&gt;
&lt;p&gt;Деякі системи хоч і доступні всім, але поріг входу в них занадто високий. Але ChatGPT і тут зможе допомогти його подолати.&lt;/p&gt;
&lt;p&gt;У OpenStreetMap (карта/база даних, які відкриті для всіх) зберігається величезна база геоданих, доступ до яких не суперпростий. І в OSM є мова запитів Overpass, яка дозволяє вивантажувати / запитувати якусь певну частину тих даних. Так от Overpass супер-неінтуітивна мова, і тут Chat GPT допомагає перекласти запит з людської на машинну.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/lemonodor/status/1636849040548675584"&gt;twitter.com/lemonodor/status/1636849040548675584&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;P.S.&lt;/h2&gt;
&lt;p&gt;І це я скористався лише безкоштовною версією ChatGPT (модель GPT 3.5), і вже відчув, що стаю продуктивнішим ніби маю ще один механізований маніпулятор на додачу до рук, який розуміє що я хочу зробити та робить це швидше,&lt;/p&gt;
&lt;p&gt;Тепер спробую модель Codex (Github Copilot), яка створювалась як раз для написання коду, а також GPT4. Напишу потім, що з цього вийшло.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Також хотів проілюструвати цю думку згенерувавши картинку людини з ще оною механізованою рукою, накшталт, технодесандників з Вархаммеру, але з 20 спроб у Midjourney v4 мого задуму не вийшло&lt;/i&gt; ¯\_(ツ)_/¯&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1024" data-ratio="1"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_5e4ed387-75ea-434f-80ad-54a6bbf25a92-transformed.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_c97b8485-4aa5-4fcc-aba3-c6bbdc06f756-transformed.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_man_with_augmentics_stay_with_laptop_at_the_large_f_35d6b34f-06c8-42a9-bb5f-a9f7d0228c89.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_man_with_augmentics_stay_with_laptop_at_the_large_f_366792c8-fc63-431c-adb1-e75029104bb6.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_man_with_augmentics_stay_with_laptop_at_the_large_f_b5de7f02-f43b-4fd6-b01c-4c33fcdace3e.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_man_with_bionic_robotic_mechanical_manipulator_in_h_4edd41d4-5a33-488d-ad2c-58255555764f.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_man_with_bionic_robotic_mechanical_manipulator_in_h_79d5dd21-a324-4f24-b5c2-ce37832c925b.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_5e4ed387-75ea-434f-80ad-54a6bbf25a92.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_15cc879c-6032-47b5-883c-56ccb48732cb.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_bb7622b8-8dac-41de-9925-d14892d79a05.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_man_with_extra_bionic_robotic_mechanical_manipulato_c97b8485-4aa5-4fcc-aba3-c6bbdc06f756.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_techmarine_warhammer_40k_style_with_robotic_arm_sit_092b8d8f-7132-4b40-9394-dd83607d6cb8.png" width="1024" height="1024" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/alexkolodko_techno_spacemarine_warhammer40k_style_with_robotic__b100e5a6-8d87-4b47-83cf-3151991a242a.png" width="1024" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;hr&gt;&lt;/p&gt;
&lt;div&gt;&lt;div style="float: left;"&gt;&lt;p&gt;&lt;span style="font-weight:bold; font-size: 3em"&gt;&lt;b&gt;?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="padding: 1em 0 0 4em"&gt;&lt;p&gt;Якщо у вас приклади вашого повторюваного дизайн-процесу, який ви повторюєте щоразу і витрачаєте свій час, напишіть на &lt;a href="mailto:alexkolodko@gmail.com"&gt;пошту&lt;/a&gt; або у &lt;a href="https://t.me/alexkolodko"&gt;телеграм&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;
&lt;div&gt;&lt;div style="float: left;"&gt;&lt;p&gt;&lt;span style="font-weight:bold; font-size: 3em"&gt;&lt;b&gt;₴&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="padding: 1em 0 0 4em"&gt;&lt;p&gt;Якщо вам було цікаво та корисно, можете пригостити мене кавою ☕️: картка Монобанку: &lt;tt&gt;4441114450427339&lt;/tt&gt; або &lt;a href="https://send.monobank.ua/5jVrTaRziu"&gt;через сайт&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
</item>

<item>
<title>QA: Автоматизація компресії зображень</title>
<guid isPermaLink="false">64</guid>
<link>https://blog-archive.alexkolodko.com/all/qa-automation-image-compression/</link>
<pubDate>Wed, 12 Oct 2022 11:50:53 +0200</pubDate>
<author></author>
<comments>https://blog-archive.alexkolodko.com/all/qa-automation-image-compression/</comments>
<description>
&lt;p&gt;&lt;b&gt;Q:  А якщо до імдж компресії? Чи можно автонакидувати термінальні команди?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A: По компресії є кілька методів. Зняв відео, а нижче опис:&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/mNzGMuvwl60?enablejsapi=1" allow="autoplay" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;div class="e2-text-caption"&gt;Автоматитизація компресії зображень&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;1. ImageOptim&lt;/h2&gt;
&lt;p&gt; На Мак є програма &lt;a href="https://imageoptim.com/mac"&gt;ImageOptim&lt;/a&gt;. Пачкою оптимізує будь-яку кількість картинок. Працює на алгоритмі &lt;a href="https://pngquant.org"&gt;PNGQuant&lt;/a&gt; і також доступний, як програма для терміналу.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/ImageOptim-app@2x.png" width="514" height="166" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;2. Terminal: optipng, jpegopti, gifsicle, svgo&lt;/h2&gt;
&lt;p&gt;Є кілька програм оптимізації зображень для термінала:&lt;/p&gt;
&lt;p&gt;а) Для PNG є &lt;b&gt;PNGQuant&lt;/b&gt;, &lt;b&gt;pngcrush&lt;/b&gt; та &lt;b&gt;optipng&lt;/b&gt;. Останній також вміє конвертувати BMP, GIF, TIFF у PNG, сайт. На його прикладі і подивимось.&lt;/p&gt;
&lt;p&gt;Працює так: оптимізує всі файли PNG у теці&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;optipng *.png&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Або ще отакий :&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;find . -name &amp;#039;*.png&amp;#039; | xargs optipng -nc -nb -o7 -full&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;А отак рекурсивно шукає та оптимізує PNG у всіх підтеках:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;find . -iname &amp;quot;*.png&amp;quot; -exec optipng -o7 {} \;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;б) &lt;b&gt;jpegopti&lt;/b&gt; для JPG. &lt;a href="https://github.com/tjko/jpegoptim"&gt;Github&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Працює так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;jpegoptim -m70 img-name&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;-m70 — відсоток стискання&lt;/p&gt;
&lt;p&gt;в) &lt;b&gt;gifsicle&lt;/b&gt; для GIF. &lt;a href="https://www.lcdf.org/gifsicle/"&gt;Сайт&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Для одного зображення:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;gifsicle --batch -V -O2 image-name.gif&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Так само рекурсивно шукає та оптимізує GIF у всіх підтеках:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;find . -iname &amp;quot;*.gif&amp;quot; -exec gifsicle --batch -V -O2 {} \;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;г) svgo для SVG.&lt;/p&gt;
&lt;p&gt;Працює так для всіх файлів:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;svgo *.svg&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Інсталюються всі вони через Homebrew:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;brew install optipng&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;3.1 Automator: quick action&lt;/h2&gt;
&lt;p&gt;Попередні команди збираємо у окремий bash-скріпт, сценарій для автоматора та сценарій на теку.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-workflow-quick-action.png" width="847" height="1200" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Сценарій будується так:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;отримання файлів (у даному випадку всі виділені)&lt;/li&gt;
&lt;li&gt;встановлення хз як змінних для скрипта (Set Value та Get Value)&lt;/li&gt;
&lt;li&gt;запуск bash-скрипта на виділених файлах (Run Shell Script, з налаштуваннями Shell /bin/bash та Pass Input: as arguments)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://www.dropbox.com/sh/qxjv55wg5utwziz/AAAn1n04lDgklL1G0ijjppNVa?dl=0"&gt; Завантажити цей сценарій&lt;/a&gt; (попередньо треба встановити термінальні команди optipng, jpegopti, pngcrush, svgo).&lt;/p&gt;
&lt;p&gt;Сам скрипт:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;export PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:$PATH

BIN_PATH=~/Library/Services/.bin

for f in &amp;quot;$@&amp;quot;; do
    if [ -d $f ]; then
        echo &amp;quot;TODO: nothing to compress now!&amp;quot;
    elif [[ $f == *.png ]]; then
        if hash optipng 2&amp;gt;/dev/null; then
            optipng -o7 &amp;quot;$f&amp;quot;
        else
            $BIN_PATH/optipng -o7 &amp;quot;$f&amp;quot;
        fi
        if hash pngcrush 2&amp;gt;/dev/null; then
            pngcrush -brute -reduce -ow &amp;quot;$f&amp;quot;
        else
            $BIN_PATH/pngcrush -brute -reduce -ow &amp;quot;$f&amp;quot;
        fi
    elif [[ $f == *.jpg ]]; then
        if hash jpegoptim 2&amp;gt;/dev/null; then
            jpegoptim &amp;quot;$f&amp;quot; --strip-all --force --all-progressive --size=150k
        else
            echo &amp;quot;No jpegoptim installed, skipped.&amp;quot;
        fi
    elif [[ $f == *.svg ]]; then
        if hash svgo 2&amp;gt;/dev/null; then
            svgo &amp;quot;$f&amp;quot;
        else
            echo &amp;quot;No SVGO installed, skipped.&amp;quot;
        fi
    else
        echo &amp;quot;TODO: nothing to compress now!&amp;quot;
    fi
done;&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;3.2 Automator: folder action&lt;/h2&gt;
&lt;p&gt;А на теку попередній сценарій підлаштовується просто з відключеним першим кроком. А на теку попередній сценарій підлаштовується просто з відключеним першим кроком. &lt;a href="https://www.dropbox.com/sh/29ntmizetk2w3wo/AAB_R1ieTaHli6267gIxUzT-a?dl=0"&gt;Завантажити скрипт для теки&lt;/a&gt;.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-workflow-folder.png" width="855" height="1200" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;hr&gt;&lt;/p&gt;
&lt;div&gt;&lt;div style="float: left;"&gt;&lt;p&gt;&lt;span style="font-weight:bold; font-size: 3em"&gt;&lt;b&gt;?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="padding: 1em 0 0 4em"&gt;&lt;p&gt;Розкажіть, будь ласка, які дії з файлами вам доводиться періодично повторювати? Які рутинні задачі у вас бувають? Мені цікаво, які задачі можливо автоматизувати. Напишіть на &lt;a href="mailto:alexkolodko@gmail.com"&gt;пошту&lt;/a&gt; або у &lt;a href="https://t.me/alexkolodko"&gt;телеграм&lt;/a&gt;. ▶️ Більше у телеграм-каналі «Здоровий глузд» — &lt;a href="https://t.me/alexkolodko1"&gt;https://t.me/alexkolodko1&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;p&gt;—&lt;/p&gt;
</description>
</item>

<item>
<title>QA: Автоматизоване перейменування файлів</title>
<guid isPermaLink="false">63</guid>
<link>https://blog-archive.alexkolodko.com/all/qa-rename/</link>
<pubDate>Tue, 11 Oct 2022 23:50:07 +0200</pubDate>
<author></author>
<comments>https://blog-archive.alexkolodko.com/all/qa-rename/</comments>
<description>
&lt;p&gt;&lt;b&gt;Q: Часто доводиться додавати декілька слів на початку назв 10 файлів у папці. Цікаво, чи можна зробити так, щоб можна було прописувати ці декілька слів один раз, а вони додавалися до назв всіх файлів у папці автоматично?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A: Так, на Маку по перше можна напіввручну через функцію перейменування файлів додавати всім файлам на початку назви певне слово.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/RLHfAcvF_6E?enablejsapi=1" allow="autoplay" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;А також в Автоматорі → Rename Finder Items. Там серед варіантів є додавання тексту до чи після назви файлу. До речі, ця функція в Автоматорі більш просунута, ніж звичайне перейменування у Finder. І використовувати можна або через контекстне меню → Quick Actions, або створити автоматизацію для теки.&lt;/p&gt;
&lt;p&gt;Ще можна перейменовувати файли у певному форматі, наприклад, по днях року, за допомогою  bash-скрипта: &lt;a href="https://blog.alexkolodko.com/all/mass-rename/"&gt;https://blog.alexkolodko.com/all/mass-rename/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr&gt;&lt;/p&gt;
&lt;div&gt;&lt;div style="float: left;"&gt;&lt;p&gt;&lt;span style="font-weight:bold; font-size: 3em"&gt;&lt;b&gt;?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="padding: 1em 0 0 4em"&gt;&lt;p&gt;Розкажіть, будь ласка, які дії з файлами вам доводиться періодично повторювати? Які рутинні задачі у вас бувають? Мені цікаво, які задачі можливо автоматизувати. Напишіть на &lt;a href="mailto:alexkolodko@gmail.com"&gt;пошту&lt;/a&gt; або у &lt;a href="https://t.me/alexkolodko"&gt;телеграм&lt;/a&gt;. ▶️ Більше у телеграм-каналі «Здоровий глузд» — &lt;a href="https://t.me/alexkolodko1"&gt;https://t.me/alexkolodko1&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;p&gt;—&lt;/p&gt;
</description>
</item>

<item>
<title>Автоматизація у папках у Mac OS за допомогою Automator</title>
<guid isPermaLink="false">59</guid>
<link>https://blog-archive.alexkolodko.com/all/macos-folder-automation/</link>
<pubDate>Fri, 07 Oct 2022 17:07:45 +0200</pubDate>
<author></author>
<comments>https://blog-archive.alexkolodko.com/all/macos-folder-automation/</comments>
<description>
&lt;p&gt;На Маку можна на певні теки повісити автоматизацію, при чому можна створити доволі багато різних дій, які обмежені тільки функціями Автоматора (а при знанні Apple Script так і взагалі будь-що у системі можна зробити). Реалізація дещо крива, але в цілому працює.&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/b9FgHx6RE2c?enablejsapi=1" allow="autoplay" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;div class="e2-text-caption"&gt;Швидке демо: файл HEIC конвертується у JPG, а далі копіїються у окрему теку, зменшується на 50% та у назву додається текст «_50%».&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Як це працює&lt;/h2&gt;
&lt;p&gt;Для цього знадобляться два системні інструменти: &lt;b&gt;Automator&lt;/b&gt; та &lt;b&gt;Folder Action Setup&lt;/b&gt;. У Автоматорі створюється саме автоматизація для теки (folder action), обирається конкретна тека та налаштовується конкретна послідовність дій (workflow) з файлами, які до неї потрапляють. &lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-create-folder-action.png" width="2400" height="1786" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Створення дії для теки в Автоматорі&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Приклади послідовностей:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Конвертація картинок у формат JPG.&lt;/li&gt;
&lt;li&gt;Збереження копії картинки у теці під назвою «50», конвертування картинки у JPG, зміна розміру та  додавання до назви тексту «_50%».&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="2400" data-ratio="1.3437849944009"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-flow-1-convert.png" width="2400" height="1786" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-flow-2-resize-rename-move.png" width="2400" height="1786" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-caption"&gt;Приклади послідовностей&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;У Folder Action збираються всі наявні дії на теках, які можна переглянути, додати, вимкнути чи видалити. При цьому створивши одну послідовність дій, її можна застосовувати для різних тек. А також для однієї теки можна налаштувати будь-яку кількість сценаріїв, які відтворюватимуться послідовно: наприклад, конвертувати всі картинки у JPG, а потім зробити копію з розміром 50% від оригіналу та покласти цю копію в окрему теку.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="2400" data-ratio="1.2182741116751"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/folder-actions-setup-1.png" width="2400" height="1970" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/folder-actions-setup-2-add-action.png" width="2400" height="2100" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-caption"&gt;Інтерфейс Folder Action Setup&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Також детальне пояснення автоматизації тек: &lt;a href="https://macosxautomation.com/automator/folder-action/index.html"&gt;https://macosxautomation.com/automator/folder-action/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr&gt;&lt;/p&gt;
&lt;div&gt;&lt;div style="float: left;"&gt;&lt;p&gt;&lt;span style="font-weight:bold; font-size: 3em"&gt;&lt;b&gt;?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="padding: 1em 0 0 4em"&gt;&lt;p&gt;Розкажіть, будь ласка, які дії з файлами вам доводиться періодично повторювати? Які рутинні задачі у вас бувають? Мені цікаво, які задачі можливо автоматизувати. Напишіть на &lt;a href="mailto:alexkolodko@gmail.com"&gt;пошту&lt;/a&gt; або у &lt;a href="https://t.me/alexkolodko"&gt;телеграм&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
</item>

<item>
<title>Automator</title>
<guid isPermaLink="false">36</guid>
<link>https://blog-archive.alexkolodko.com/all/automator-tools/</link>
<pubDate>Tue, 14 Sep 2021 14:21:25 +0200</pubDate>
<author></author>
<comments>https://blog-archive.alexkolodko.com/all/automator-tools/</comments>
<description>
&lt;p&gt;На маку є цікава вже вбудована програма — Автоматор. Вона дозволяє автоматизувати частину дій з файлами та теками у системі. Інтерфейс у неї простий:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;обрати тип файлів, для яких потрібно застосовувати сценарій;&lt;/li&gt;
&lt;li&gt;зібрати послідовність дій, які потрібно зробити з цими файлами (можна обрати з готових дій різних програм або написати власний скрипт на AppleScript або JS).&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-newfile@2x.png" width="1219" height="932" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Сценарій можна створити у вигляді окремої програми, швидкої дії, яку можна викликати через контекстне меню у Finder, або навіть, як дію для конкретної теки (буде застосовуватись до всіх файлів, які туди потрапляють).&lt;/p&gt;
&lt;p&gt;Я в більшій мірі використовую Автоматор для роботи з файлами. Основні задачі в побуті:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;конвертація в різні формати (найчастіше HEIC → JPG);&lt;/li&gt;
&lt;li&gt;зміна розмірів зображень;&lt;/li&gt;
&lt;li&gt;розділення PDF посторінково (іноді коли макети зібрані в один файл так простіше розділяти);&lt;/li&gt;
&lt;li&gt;перетворення купи картинок у PDF;&lt;/li&gt;
&lt;li&gt;копіювання шляху до файлу на диску (щоб поділитись де можна знайти необхідний файл).&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1124" data-ratio="1.3239104829211"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-image-resize@2x.png" width="1124" height="849" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-massrename@2x.png" width="1219" height="932" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-PDF2PNG@2x.png" width="1124" height="849" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-splitPDF@2x.png" width="1124" height="849" alt="" /&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-toPDF@2x.png" width="1219" height="1024" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-caption"&gt;Приклади різних сценаріїв&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;В основному такі нескладні дії. Але там можна і скрипти запускати в різній послідовності. Наприклад, щоб з одного скріншоту створити картинки для блогу в двох розмірах — звичайному та ретиновому @2x.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/automator-retinaImages@2x.png" width="1219" height="1078" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Додаємо @2x у назву файла, копіюємо файл, зменшуємо на 50%, прибираємо з назви у скопійованого «@2x copy»&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Корисні лінки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sparanoid/automator-workflows"&gt;Колекції різних сценаріїв на Гітхабі&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://macosxautomation.com/automator/index.html"&gt;Приклади застосування на macosxautomation.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.apple.com/en-gb/guide/automator/welcome/mac"&gt;Посібник користувача від Apple&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>Масове переіменування файлів</title>
<guid isPermaLink="false">35</guid>
<link>https://blog-archive.alexkolodko.com/all/mass-rename/</link>
<pubDate>Mon, 13 Sep 2021 11:13:57 +0200</pubDate>
<author></author>
<comments>https://blog-archive.alexkolodko.com/all/mass-rename/</comments>
<description>
&lt;p&gt;У продовження&lt;a href="https://blog.alexkolodko.com/all/design-bruteforce/"&gt; попередньої теми&lt;/a&gt;: коли ми отримуємо безліч макетів, то для кращого орієнтування їх потрібно зрозуміло всі переназвати.&lt;/p&gt;
&lt;p&gt;Стандартний інструмент МакОС дає можливість дуже обмежено або замінити частину назви або задати у певному форматі. Але ця функція не гнучка.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/rename-macos.png" width="1002" height="306" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Automator&lt;/h2&gt;
&lt;p&gt;Наприклад, для паркувальних табличок логічним був би формат&lt;/p&gt;
&lt;pre&gt;А1001&lt;/pre&gt;
&lt;p&gt;по номеру майданчика. Стандартними інструментами неможливо додати нумерацію з нулями на початку (від 001 до 999). Але на допомогу в такій ситуації приходить маківський Автоматор. У ньому як раз дуже цікава функція — Rename Finder Items. У ньому можна обрати Make Sequential, який і дозволить задати необхідний нам формат за допомогою чекбоксу «Make all numbers _ digits long», щоб усі номери складались з трьох цифр включно з нулями.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/rename-automator-1.png" width="1800" height="1376" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Вигляд шаблону в Автоматорі&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Зберігаємо цей воркфлоу, як швидку дію, та застосовуємо через контексте меню.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://blog-archive.alexkolodko.com/pictures/rename-automator-2.png" width="1800" height="1422" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Вибір збереженого воркфлоу з контекстного меню&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;UPD: &lt;a href="https://t.me/alexkolodko1/351"&gt;у телеграмі&lt;/a&gt; відповідаючи на питання показав, як можна зробити автоматичне перейменування через quick action та зробити автоматизацію для теки:&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/RLHfAcvF_6E?enablejsapi=1" allow="autoplay" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;div class="e2-text-caption"&gt;Автоматичне перейменування файлів&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;bash&lt;/h2&gt;
&lt;p&gt;Переіменувати по днях року стандартними інструментами виявилось геть неможливо, а перейменовувати по місяцях вручну це знову ж не для лінивих, особливо коли це потрібно зробити 9 разів поспіль, а якщо десь у макетах помилка, то перезберігати та перейменовувати буде потрібно наново.&lt;/p&gt;
&lt;p&gt;У цьому випадку нам на допомогу приходять bash-скрипти. Я написав &lt;a href="https://github.com/alexkolodko/bash-scripts/blob/master/renamer_v2.2.sh"&gt;простий скрипт&lt;/a&gt;, в якому задав масив всіх дат, а потім скрипт бере кожен файл у теці та перейменовує їх послідовно, як вказано у масиві.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;#!/bin/bash

name_array=(&amp;quot;01-01&amp;quot; &amp;quot;01-02&amp;quot; &amp;quot;01-03&amp;quot; &amp;quot;01-04&amp;quot; &amp;quot;01-05&amp;quot; &amp;quot;01-06&amp;quot; &amp;quot;01-07&amp;quot; &amp;quot;01-08&amp;quot; &amp;quot;01-09&amp;quot; &amp;quot;01-10&amp;quot; &amp;quot;01-11&amp;quot; &amp;quot;01-12&amp;quot; &amp;quot;01-13&amp;quot; &amp;quot;01-14&amp;quot; &amp;quot;01-15&amp;quot; &amp;quot;01-16&amp;quot; &amp;quot;01-17&amp;quot; &amp;quot;01-18&amp;quot; &amp;quot;01-19&amp;quot; &amp;quot;01-20&amp;quot; &amp;quot;01-21&amp;quot; &amp;quot;01-22&amp;quot; &amp;quot;01-23&amp;quot; &amp;quot;01-24&amp;quot; &amp;quot;01-25&amp;quot; &amp;quot;01-26&amp;quot; &amp;quot;01-27&amp;quot; &amp;quot;01-28&amp;quot; &amp;quot;01-29&amp;quot; &amp;quot;01-30&amp;quot; &amp;quot;01-31&amp;quot; &amp;quot;02-01&amp;quot; &amp;quot;02-02&amp;quot; &amp;quot;02-03&amp;quot; &amp;quot;02-04&amp;quot; &amp;quot;02-05&amp;quot; &amp;quot;02-06&amp;quot; &amp;quot;02-07&amp;quot; &amp;quot;02-08&amp;quot; &amp;quot;02-09&amp;quot; &amp;quot;02-10&amp;quot; &amp;quot;02-11&amp;quot; &amp;quot;02-12&amp;quot; &amp;quot;02-13&amp;quot; &amp;quot;02-14&amp;quot; &amp;quot;02-15&amp;quot; &amp;quot;02-16&amp;quot; &amp;quot;02-17&amp;quot; &amp;quot;02-18&amp;quot; &amp;quot;02-19&amp;quot; &amp;quot;02-20&amp;quot; &amp;quot;02-21&amp;quot; &amp;quot;02-22&amp;quot; &amp;quot;02-23&amp;quot; &amp;quot;02-24&amp;quot; &amp;quot;02-25&amp;quot; &amp;quot;02-26&amp;quot; &amp;quot;02-27&amp;quot; &amp;quot;02-28&amp;quot; &amp;quot;02-29&amp;quot; &amp;quot;03-01&amp;quot; &amp;quot;03-02&amp;quot; &amp;quot;03-03&amp;quot; &amp;quot;03-04&amp;quot; &amp;quot;03-05&amp;quot; &amp;quot;03-06&amp;quot; &amp;quot;03-07&amp;quot; &amp;quot;03-08&amp;quot; &amp;quot;03-09&amp;quot; &amp;quot;03-10&amp;quot; &amp;quot;03-11&amp;quot; &amp;quot;03-12&amp;quot; &amp;quot;03-13&amp;quot; &amp;quot;03-14&amp;quot; &amp;quot;03-15&amp;quot; &amp;quot;03-16&amp;quot; &amp;quot;03-17&amp;quot; &amp;quot;03-18&amp;quot; &amp;quot;03-19&amp;quot; &amp;quot;03-20&amp;quot; &amp;quot;03-21&amp;quot; &amp;quot;03-22&amp;quot; &amp;quot;03-23&amp;quot; &amp;quot;03-24&amp;quot; &amp;quot;03-25&amp;quot; &amp;quot;03-26&amp;quot; &amp;quot;03-27&amp;quot; &amp;quot;03-28&amp;quot; &amp;quot;03-29&amp;quot; &amp;quot;03-30&amp;quot; &amp;quot;03-31&amp;quot; &amp;quot;04-01&amp;quot; &amp;quot;04-02&amp;quot; &amp;quot;04-03&amp;quot; &amp;quot;04-04&amp;quot; &amp;quot;04-05&amp;quot; &amp;quot;04-06&amp;quot; &amp;quot;04-07&amp;quot; &amp;quot;04-08&amp;quot; &amp;quot;04-09&amp;quot; &amp;quot;04-10&amp;quot; &amp;quot;04-11&amp;quot; &amp;quot;04-12&amp;quot; &amp;quot;04-13&amp;quot; &amp;quot;04-14&amp;quot; &amp;quot;04-15&amp;quot; &amp;quot;04-16&amp;quot; &amp;quot;04-17&amp;quot; &amp;quot;04-18&amp;quot; &amp;quot;04-19&amp;quot; &amp;quot;04-20&amp;quot; &amp;quot;04-21&amp;quot; &amp;quot;04-22&amp;quot; &amp;quot;04-23&amp;quot; &amp;quot;04-24&amp;quot; &amp;quot;04-25&amp;quot; &amp;quot;04-26&amp;quot; &amp;quot;04-27&amp;quot; &amp;quot;04-28&amp;quot; &amp;quot;04-29&amp;quot; &amp;quot;04-30&amp;quot; &amp;quot;05-01&amp;quot; &amp;quot;05-02&amp;quot; &amp;quot;05-03&amp;quot; &amp;quot;05-04&amp;quot; &amp;quot;05-05&amp;quot; &amp;quot;05-06&amp;quot; &amp;quot;05-07&amp;quot; &amp;quot;05-08&amp;quot; &amp;quot;05-09&amp;quot; &amp;quot;05-10&amp;quot; &amp;quot;05-11&amp;quot; &amp;quot;05-12&amp;quot; &amp;quot;05-13&amp;quot; &amp;quot;05-14&amp;quot; &amp;quot;05-15&amp;quot; &amp;quot;05-16&amp;quot; &amp;quot;05-17&amp;quot; &amp;quot;05-18&amp;quot; &amp;quot;05-19&amp;quot; &amp;quot;05-20&amp;quot; &amp;quot;05-21&amp;quot; &amp;quot;05-22&amp;quot; &amp;quot;05-23&amp;quot; &amp;quot;05-24&amp;quot; &amp;quot;05-25&amp;quot; &amp;quot;05-26&amp;quot; &amp;quot;05-27&amp;quot; &amp;quot;05-28&amp;quot; &amp;quot;05-29&amp;quot; &amp;quot;05-30&amp;quot; &amp;quot;05-31&amp;quot; &amp;quot;06-01&amp;quot; &amp;quot;06-02&amp;quot; &amp;quot;06-03&amp;quot; &amp;quot;06-04&amp;quot; &amp;quot;06-05&amp;quot; &amp;quot;06-06&amp;quot; &amp;quot;06-07&amp;quot; &amp;quot;06-08&amp;quot; &amp;quot;06-09&amp;quot; &amp;quot;06-10&amp;quot; &amp;quot;06-11&amp;quot; &amp;quot;06-12&amp;quot; &amp;quot;06-13&amp;quot; &amp;quot;06-14&amp;quot; &amp;quot;06-15&amp;quot; &amp;quot;06-16&amp;quot; &amp;quot;06-17&amp;quot; &amp;quot;06-18&amp;quot; &amp;quot;06-19&amp;quot; &amp;quot;06-20&amp;quot; &amp;quot;06-21&amp;quot; &amp;quot;06-22&amp;quot; &amp;quot;06-23&amp;quot; &amp;quot;06-24&amp;quot; &amp;quot;06-25&amp;quot; &amp;quot;06-26&amp;quot; &amp;quot;06-27&amp;quot; &amp;quot;06-28&amp;quot; &amp;quot;06-29&amp;quot; &amp;quot;06-30&amp;quot; &amp;quot;07-01&amp;quot; &amp;quot;07-02&amp;quot; &amp;quot;07-03&amp;quot; &amp;quot;07-04&amp;quot; &amp;quot;07-05&amp;quot; &amp;quot;07-06&amp;quot; &amp;quot;07-07&amp;quot; &amp;quot;07-08&amp;quot; &amp;quot;07-09&amp;quot; &amp;quot;07-10&amp;quot; &amp;quot;07-11&amp;quot; &amp;quot;07-12&amp;quot; &amp;quot;07-13&amp;quot; &amp;quot;07-14&amp;quot; &amp;quot;07-15&amp;quot; &amp;quot;07-16&amp;quot; &amp;quot;07-17&amp;quot; &amp;quot;07-18&amp;quot; &amp;quot;07-19&amp;quot; &amp;quot;07-20&amp;quot; &amp;quot;07-21&amp;quot; &amp;quot;07-22&amp;quot; &amp;quot;07-23&amp;quot; &amp;quot;07-24&amp;quot; &amp;quot;07-25&amp;quot; &amp;quot;07-26&amp;quot; &amp;quot;07-27&amp;quot; &amp;quot;07-28&amp;quot; &amp;quot;07-29&amp;quot; &amp;quot;07-30&amp;quot; &amp;quot;07-31&amp;quot; &amp;quot;08-01&amp;quot; &amp;quot;08-02&amp;quot; &amp;quot;08-03&amp;quot; &amp;quot;08-04&amp;quot; &amp;quot;08-05&amp;quot; &amp;quot;08-06&amp;quot; &amp;quot;08-07&amp;quot; &amp;quot;08-08&amp;quot; &amp;quot;08-09&amp;quot; &amp;quot;08-10&amp;quot; &amp;quot;08-11&amp;quot; &amp;quot;08-12&amp;quot; &amp;quot;08-13&amp;quot; &amp;quot;08-14&amp;quot; &amp;quot;08-15&amp;quot; &amp;quot;08-16&amp;quot; &amp;quot;08-17&amp;quot; &amp;quot;08-18&amp;quot; &amp;quot;08-19&amp;quot; &amp;quot;08-20&amp;quot; &amp;quot;08-21&amp;quot; &amp;quot;08-22&amp;quot; &amp;quot;08-23&amp;quot; &amp;quot;08-24&amp;quot; &amp;quot;08-25&amp;quot; &amp;quot;08-26&amp;quot; &amp;quot;08-27&amp;quot; &amp;quot;08-28&amp;quot; &amp;quot;08-29&amp;quot; &amp;quot;08-30&amp;quot; &amp;quot;08-31&amp;quot; &amp;quot;09-01&amp;quot; &amp;quot;09-02&amp;quot; &amp;quot;09-03&amp;quot; &amp;quot;09-04&amp;quot; &amp;quot;09-05&amp;quot; &amp;quot;09-06&amp;quot; &amp;quot;09-07&amp;quot; &amp;quot;09-08&amp;quot; &amp;quot;09-09&amp;quot; &amp;quot;09-10&amp;quot; &amp;quot;09-11&amp;quot; &amp;quot;09-12&amp;quot; &amp;quot;09-13&amp;quot; &amp;quot;09-14&amp;quot; &amp;quot;09-15&amp;quot; &amp;quot;09-16&amp;quot; &amp;quot;09-17&amp;quot; &amp;quot;09-18&amp;quot; &amp;quot;09-19&amp;quot; &amp;quot;09-20&amp;quot; &amp;quot;09-21&amp;quot; &amp;quot;09-22&amp;quot; &amp;quot;09-23&amp;quot; &amp;quot;09-24&amp;quot; &amp;quot;09-25&amp;quot; &amp;quot;09-26&amp;quot; &amp;quot;09-27&amp;quot; &amp;quot;09-28&amp;quot; &amp;quot;09-29&amp;quot; &amp;quot;09-30&amp;quot; &amp;quot;10-01&amp;quot; &amp;quot;10-02&amp;quot; &amp;quot;10-03&amp;quot; &amp;quot;10-04&amp;quot; &amp;quot;10-05&amp;quot; &amp;quot;10-06&amp;quot; &amp;quot;10-07&amp;quot; &amp;quot;10-08&amp;quot; &amp;quot;10-09&amp;quot; &amp;quot;10-10&amp;quot; &amp;quot;10-11&amp;quot; &amp;quot;10-12&amp;quot; &amp;quot;10-13&amp;quot; &amp;quot;10-14&amp;quot; &amp;quot;10-15&amp;quot; &amp;quot;10-16&amp;quot; &amp;quot;10-17&amp;quot; &amp;quot;10-18&amp;quot; &amp;quot;10-19&amp;quot; &amp;quot;10-20&amp;quot; &amp;quot;10-21&amp;quot; &amp;quot;10-22&amp;quot; &amp;quot;10-23&amp;quot; &amp;quot;10-24&amp;quot; &amp;quot;10-25&amp;quot; &amp;quot;10-26&amp;quot; &amp;quot;10-27&amp;quot; &amp;quot;10-28&amp;quot; &amp;quot;10-29&amp;quot; &amp;quot;10-30&amp;quot; &amp;quot;10-31&amp;quot; &amp;quot;11-01&amp;quot; &amp;quot;11-02&amp;quot; &amp;quot;11-03&amp;quot; &amp;quot;11-04&amp;quot; &amp;quot;11-05&amp;quot; &amp;quot;11-06&amp;quot; &amp;quot;11-07&amp;quot; &amp;quot;11-08&amp;quot; &amp;quot;11-09&amp;quot; &amp;quot;11-10&amp;quot; &amp;quot;11-11&amp;quot; &amp;quot;11-12&amp;quot; &amp;quot;11-13&amp;quot; &amp;quot;11-14&amp;quot; &amp;quot;11-15&amp;quot; &amp;quot;11-16&amp;quot; &amp;quot;11-17&amp;quot; &amp;quot;11-18&amp;quot; &amp;quot;11-19&amp;quot; &amp;quot;11-20&amp;quot; &amp;quot;11-21&amp;quot; &amp;quot;11-22&amp;quot; &amp;quot;11-23&amp;quot; &amp;quot;11-24&amp;quot; &amp;quot;11-25&amp;quot; &amp;quot;11-26&amp;quot; &amp;quot;11-27&amp;quot; &amp;quot;11-28&amp;quot; &amp;quot;11-29&amp;quot; &amp;quot;11-30&amp;quot; &amp;quot;12-01&amp;quot; &amp;quot;12-02&amp;quot; &amp;quot;12-03&amp;quot; &amp;quot;12-04&amp;quot; &amp;quot;12-05&amp;quot; &amp;quot;12-06&amp;quot; &amp;quot;12-07&amp;quot; &amp;quot;12-08&amp;quot; &amp;quot;12-09&amp;quot; &amp;quot;12-10&amp;quot; &amp;quot;12-11&amp;quot; &amp;quot;12-12&amp;quot; &amp;quot;12-13&amp;quot; &amp;quot;12-14&amp;quot; &amp;quot;12-15&amp;quot; &amp;quot;12-16&amp;quot; &amp;quot;12-17&amp;quot; &amp;quot;12-18&amp;quot; &amp;quot;12-19&amp;quot; &amp;quot;12-20&amp;quot; &amp;quot;12-21&amp;quot; &amp;quot;12-22&amp;quot; &amp;quot;12-23&amp;quot; &amp;quot;12-24&amp;quot; &amp;quot;12-25&amp;quot; &amp;quot;12-26&amp;quot; &amp;quot;12-27&amp;quot; &amp;quot;12-28&amp;quot; &amp;quot;12-29&amp;quot; &amp;quot;12-30&amp;quot; &amp;quot;12-31&amp;quot;)
i=0

# New filename
newname=$1

if [ ! -n &amp;quot;$newname&amp;quot; ]; then
read -p &amp;quot;Enter new filename: &amp;quot; newname
fi


# Find PDF and rename them
for pdf_file in $( gls -1v *.pdf ); do
mv $pdf_file &amp;quot;$newname-${name_array[i]}.pdf&amp;quot;
let i=i+1
done&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Саме цей скрипт застосовується у відео зі змінними&lt;/p&gt;
&lt;div class="e2-text-video"&gt;
&lt;iframe src="https://www.youtube.com/embed/m6HxcWWCFz4?enablejsapi=1" allow="autoplay" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;&lt;hr&gt;&lt;/p&gt;
&lt;p&gt;💡Чи потрібно для цього знати bash та вміти програмувати? Ні, не треба. Я і не знаю. головне розуміти як в цілому працює код та програмування. Коли у мене виникає запит на якусь конкретну задачу, то я шукаю, хто вже робив подібні чи схожі скрипти, копіюю знайдене та адаптовую під свою задачу. Дуже допомагає в цьому StackOverflow та різні онлайн пісочниці на кшталт Codepen чи Jsfidlle.&lt;/p&gt;
</description>
</item>


</channel>
</rss>