<?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>Лайвлупинг, медиапродакшн и все эти ваши компьютеры: заметки с тегом Linux</title>
<link>https://batishchev.ru/blog/tags/linux/</link>
<description>Алексей Батищев. Заметки обо всём, что происходит со мной и окружающим миром</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.4 (v4171)</generator>

<itunes:subtitle>Алексей Батищев. Заметки обо всём, что происходит со мной и окружающим миром</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>КЭНК: выгрузка фото из iCloud на Яндекс диск</title>
<guid isPermaLink="false">76</guid>
<link>https://batishchev.ru/blog/all/kenk-iz-icloud-na-yandeks-disk/</link>
<pubDate>Sun, 27 Dec 2020 12:13:08 +0300</pubDate>
<author></author>
<comments>https://batishchev.ru/blog/all/kenk-iz-icloud-na-yandeks-disk/</comments>
<description>
&lt;p&gt;Технологии предоставляют людям всё больше готовых результатов, скрывая под капотом внутреннюю сложность и логику. Это здорово, потому что мы получаем кучу услуг и сервисов, не прилагая к этому усилий. Это плохо, потому что мы не управляем этими услугами, можем лишиться их в любой момент и, если не предпринимать дополнительных мер, не сможем ничего тут исправить.&lt;/p&gt;
&lt;p&gt;Например, иг — попробуйте штатными средствами, положенными по закону, выгрузить свои данные — и через боль и неудобства вы сможете сохранить жалкое подобие архива, а как красиво всё смотрится пока работает. Увели у вас аккаунт, заблокировали по какой-то уважительной для роботов причине — вы абсолютно беззащитны перед произволом обстоятельств и желаниями компании.&lt;/p&gt;
&lt;p&gt;Сегодняшний рассказ — о сервисе, который достался «забесплатно», но потом перестал работать, и о том как я добился получения привычного результата уже своими силами.&lt;/p&gt;
&lt;h2&gt;Что случилось и кто виноват&lt;/h2&gt;
&lt;p&gt;В мире победившей вычислительной фотографии я уже много лет снимаю на телефон и веду архив фото на телефоне. Это удобно, и всё связанное с повседневным фото завязано у меня на экосистему Apple. Однако, было бы глупо полагаться только на одного вендора, да и вручную выдёргивать фото из Apple для резервной копии не самый удобный вариант, поэтому как только Яндекс запустил фичу автоматической синхронизации фотографий на Яндекс.Диск, я сразу же начал ей пользоваться.&lt;/p&gt;
&lt;p&gt;Вышло удобно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;фотографирую на телефон или планшет, имею синхронизированные фотки на всех личных устройствах и ноуте (на разных платформах приложение называется по разному, буду дальше использовать термин Айклауд как синоним определения «ну где там у эпплов всё лежит и красиво синхронизируется и показывается на всех девайсах»).&lt;/li&gt;
&lt;li&gt;Сразу после съемки или по напоминанию отмечаю в Айклауде сердечком лучшие фото и удаляю откровенный брак и шлак, на телефоне остаются материалы лучшие и «пусть просто для архива»&lt;/li&gt;
&lt;li&gt;Всё это время полное зеркало всех фото и видео с телефона автоматически синхронизируется с папкой Фотокамера в Яндекс диске (а она уже в свою очередь бэкапится как надо на NAS)&lt;/li&gt;
&lt;li&gt;раз в 2-3 месяца провожу чистку:&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;захожу в айклауд через приложение на ноуте или телефоне,&lt;/li&gt;
&lt;li&gt;скрываю все избранные (Library — альбом Favourites —  ⌘A — hide items),&lt;/li&gt;
&lt;li&gt;стираю все оставшиеся нескрытые (и не лайканые) фотки (Library — альбом photos — ⌘A — delete items),&lt;/li&gt;
&lt;li&gt;возвращаю все скрытые обратно (Library — альбом Hidden — ⌘A — unhide items)&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;переношу все фотки из папки Фотокамера Яндекс диска в долговременный архив, Яндекс на телефоне сам синхронизируется и обратно заливает в фотокамеру только избранные фотографии&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Таким образом я всегда имею две копии актуальных фоток (избранные + недавно сделанные) на яндексе и в айклауде, а также легко регулярно очищаю хранилище на устройствах от ненужных данных, оставляя только лучшие. Также благодаря этому умные алгоритмы Apple и Яндекса генерят мне истории и ролики-воспоминания на основе лучших фото и видео из поездок, с важных событий и тому подобное.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://batishchev.ru/blog/pictures/2020-12-27-11.42.18.jpg" width="722" height="554" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Красиво переименованные и уложенные яндексдиском файлы&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Схема удобная, и работала она несколько лет, пока не случилась та самая упомянутая ранее потеря сервиса. В какой-то момент Яндекс поменял логику работы мобильного приложения — весной при очередной чистке я обнаружил, что он больше не перезакачивает в папку Фотокамера файлы, которые ранее в ней были, и после были мной удалены. Похоже что у себя они хранят хэши всех файлов, так как отредактированные после фотки в диск при такой схеме перезаливаются. Но неизменные — нет, а значит я больше не мог проводить синхронизацию лучших фото при регулярной чистке.&lt;/p&gt;
&lt;p&gt;В принципе, потеря небольшая, просто весь 2020-й Яндекс диск скидывал мне напоминания о событиях 19-го. Тем не менее, это натолкнуло меня на мысль о том, что случись что — у меня есть полный архив всех фото включая самые свежие, но архива лучших нет! На отбор их потрачено время, и теперь сведения этого отбора не защищены от потери.&lt;/p&gt;
&lt;p&gt;Казалось бы, чего тут сложного? Берём штатный способ выгрузки из Айклауда, сохраняем в папку избранные данные за нужный период — вуаля. Но тут вскрывается второй упомянутый ранее аспект — скрытая под капотом сложность.&lt;/p&gt;
&lt;p&gt;Айклауд (как и Яндекс) красиво показывает в ленте фото по датам и местам, умеет на основе этой метаинформации собирать истории и альбомы. При этом на уровне файлов творится дикая дичь — в зависимости от источника (фото сделано на телефон, сохранено из мессенджера, проявлено в Лайтруме на компе и прислано по почте, это скриншот экрана или сохранёнка с веб страницы), а также от типа файла (разные форматы видео и графики), метаданные о времени съемки, локации и другом хранятся в разных полях по разной логике. И вот выгруженные штатными средствами файлы именуются непонятно как, имеют странные даты съемки (ещё и отображаемые по-разному в зависимости от программы просмотра) — в общем никакой красоты, удобства и единообразия тут нет.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://batishchev.ru/blog/pictures/2020-12-27-11.48.08.jpg" width="1217.598097503" height="800" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Выгрузка из Айклауда. Ад и мешанина в именах, атрибутах и метаданных файлов. Дата съемки видео якобы неизвестна (но она есть, просто зашита глубоко)&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;В логику работы Айклауда все эти тонкости зашиты. В логику работы яндекса тоже — мобильное приложение при синхронизации переименовывает файлы по дате правильно, сохраняет геолокацию и всё прочее. Но теперь-то воспользоваться этой логикой яндекса мы не можем.&lt;/p&gt;
&lt;h2&gt;Что делать&lt;/h2&gt;
&lt;p&gt;Проводим НИР, применяем для решения задачи великий и могучий ExifTool. Общая схема такая:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;экспортируем данные из macOS Photo в оригинальном качестве и с записью дополнительных файлов xmp&lt;/li&gt;
&lt;li&gt;пробиваем с помощью ExifTool метаданные из xmp в медиафайлы&lt;/li&gt;
&lt;li&gt;проходимся по файлам набором команд ExifTool с разными параметрами в зависимости от типа файла и сохранённых в нём данных, чтобы переименовать их по дате&lt;/li&gt;
&lt;li&gt;раскладываем полученные файлы по каталогам дат (для удобства)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Собственно, на понимание того, в каких случаях как может храниться дата съемки, и экспериментальный подбор команд для третьего пункта, и ушло несколько часов этой субботы&lt;/p&gt;
&lt;p&gt;Зато теперь есть способ выгрузить лучшие материалы из Айклауда и разложить их красиво с сохранением метаданных, в том числе и положить в Яндекс диск для бэкапа и красивостей. Вторичная выгода — прокачка скилла и овладение инструментом ExifTool и скриптования на bash под macOS, теперь эти ваши экзифы и переименования файлов можем делать с закрытыми глазами и одной левой&lt;/p&gt;
&lt;h2&gt;Итог&lt;/h2&gt;
&lt;p&gt;Итоговый скрипт достаточно специфичен, чтобы его публиковать и отчуждать, но для истории сохраню здесь.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# экспортируем фотки из macOS Photo в оригинальном качестве и с записью xmp, открываем терминал в этот каталог

# далее пробиваем параметры из xmp в графические файлы
find . -maxdepth 1  -not -iname &amp;quot;*.xmp&amp;quot; -exec bash -c 'file=&amp;quot;{}&amp;quot;; xmpname=${file%.*}.xmp; echo &amp;quot;$xmpname&amp;quot;; echo &amp;quot;$file&amp;quot;; exiftool -tagsfromfile &amp;quot;$xmpname&amp;quot; -xmp &amp;quot;$file&amp;quot; -overwrite_original' \;

# пробиваем атрибуты и переименовываем файлы по дате в зависимости от типа и содержимого

exiftool '-FileModifyDate&amp;lt;TrackCreateDate' '-FileName&amp;lt;TrackCreateDate' -d &amp;quot;%Y-%m-%d %H-%M-%S.%%f.%%e&amp;quot; *.mov -directory=out
exiftool '-FileModifyDate&amp;lt;TrackCreateDate' '-FileName&amp;lt;TrackCreateDate' -d &amp;quot;%Y-%m-%d %H-%M-%S.%%f.%%e&amp;quot; *.mp4 -directory=out

exiftool -v '-Filename&amp;lt;${datetimeoriginal}.%f.%e' -d &amp;quot;%Y-%m-%d %H-%M-%S&amp;quot; *.jpg -directory=out -if '($datetimeoriginal and (not ($datetimeoriginal eq &amp;quot;0000:00:00 00:00:00&amp;quot;))) and ($filetype eq &amp;quot;JPEG&amp;quot;)' 
exiftool -v '-Filename&amp;lt;${datetimeoriginal}.%f.%e' -d &amp;quot;%Y-%m-%d %H-%M-%S&amp;quot; *.jpeg -directory=out -if '($datetimeoriginal and (not ($datetimeoriginal eq &amp;quot;0000:00:00 00:00:00&amp;quot;))) and ($filetype eq &amp;quot;JPEG&amp;quot;)' 
exiftool -v '-Filename&amp;lt;${DateCreated}.%f.%e' -d &amp;quot;%Y-%m-%d %H-%M-%S&amp;quot; *.jpeg -directory=out -if '($DateCreated and (not ($DateCreated eq &amp;quot;0000:00:00 00:00:00&amp;quot;))) and ($filetype eq &amp;quot;JPEG&amp;quot;)'
exiftool -v '-Filename&amp;lt;${DateCreated}.%f.%e' -d &amp;quot;%Y-%m-%d %H-%M-%S&amp;quot; *.jpg -directory=out -if '($DateCreated and (not ($DateCreated eq &amp;quot;0000:00:00 00:00:00&amp;quot;))) and ($filetype eq &amp;quot;JPEG&amp;quot;)'


exiftool -v '-Filename&amp;lt;${datetimeoriginal}.%f.%e' -d &amp;quot;%Y-%m-%d %H-%M-%S&amp;quot; *.heic -directory=out -if '($datetimeoriginal and (not ($datetimeoriginal eq &amp;quot;0000:00:00 00:00:00&amp;quot;)))'

exiftool -v '-Filename&amp;lt;${datetimeoriginal}.%f.%e' -d &amp;quot;%Y-%m-%d %H-%M-%S&amp;quot; *.png -directory=out -if '($datetimeoriginal and (not ($datetimeoriginal eq &amp;quot;0000:00:00 00:00:00&amp;quot;)))'
exiftool -v '-Filename&amp;lt;${DateCreated}.%f.%e' -d &amp;quot;%Y-%m-%d %H-%M-%S&amp;quot; *.png -directory=out -if '($DateCreated and (not ($DateCreated eq &amp;quot;0000:00:00 00:00:00&amp;quot;)))'

exiftool -v '-Filename&amp;lt;${datetimeoriginal}.%f.%e' -d &amp;quot;%Y-%m-%d %H-%M-%S&amp;quot; *.gif -directory=out -if '($datetimeoriginal and (not ($datetimeoriginal eq &amp;quot;0000:00:00 00:00:00&amp;quot;))) and ($filetype eq &amp;quot;GIF&amp;quot;)' 
exiftool -v '-Filename&amp;lt;${DateCreated}.%f.%e' -d &amp;quot;%Y-%m-%d %H-%M-%S&amp;quot; *.gif -directory=out -if '($DateCreated and (not ($DateCreated eq &amp;quot;0000:00:00 00:00:00&amp;quot;))) and ($filetype eq &amp;quot;GIF&amp;quot;)'

# Чистим xmp
rm -f ./*.xmp

# перекладываем файлы в папки YYYY/YYYY-MM/
cd out
find . -maxdepth 1  -type f -exec bash -c 'file=$(basename &amp;quot;{}&amp;quot;); yearname=${file:0:4}; monthname=${file:5:2}; pathname=&amp;quot;$yearname/$yearname-$monthname&amp;quot;; mkdir -p &amp;quot;$pathname&amp;quot;; echo &amp;quot;$pathname&amp;quot;; mv &amp;quot;$file&amp;quot; &amp;quot;$pathname&amp;quot;/ ' \;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Полезные ссылки по теме&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://exiftool.org/metafiles.html"&gt;https://exiftool.org/metafiles.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/rjames86/33b9af12548adf091a26"&gt;https://gist.github.com/rjames86/33b9af12548adf091a26&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ninedegreesbelow.com/photography/exiftool-commands.html"&gt;https://ninedegreesbelow.com/photography/exiftool-commands.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.polaine.com/2015/01/fixing-photo-and-video-file-metadata-with-exiftool/"&gt;https://www.polaine.com/2015/01/fixing-photo-and-video-file-metadata-with-exiftool/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;КЭНК!&lt;br /&gt;
Слава роботам!&lt;/p&gt;
</description>
</item>

<item>
<title>Cockpit в CentOS 8</title>
<guid isPermaLink="false">70</guid>
<link>https://batishchev.ru/blog/all/cockpit-v-centos-8/</link>
<pubDate>Sat, 12 Dec 2020 15:32:30 +0300</pubDate>
<author></author>
<comments>https://batishchev.ru/blog/all/cockpit-v-centos-8/</comments>
<description>
&lt;p&gt;Будучи Ветераном Этих Ваших Комплюктеров, всегда забивал на приветственные «знаете ли вы» различных программ и систем. Ну во-первых, камон, чему меня человека может научить какая-то там софтина. А во-вторых, мне надо будет — сам в документации посмотрю.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://batishchev.ru/blog/pictures/photo_2020-12-10-22.44.15@2x.jpg" width="640" height="431" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;А сегодня вот логинясь по совершенно другим делам в свежий тестовый CentOS 8, зацепился глазом за совет сделать вкл какому-то там «cockpit.socket», загуглил обо что это всё, попробовал — и открылась мне, всезнающему, целая новая непривычная парадигма управления линукс серверами через веб консоль, да ещё и встроенная вот так вот в минимальный дистрибутив.&lt;/p&gt;
&lt;p&gt;Век живи, век учись, и тому у кого и как учиться — тоже учись.&lt;/p&gt;
</description>
</item>

<item>
<title>Админский феншуй</title>
<guid isPermaLink="false">2793</guid>
<link>https://batishchev.ru/blog/all/2013-04-05-15-50-19/</link>
<pubDate>Fri, 05 Apr 2013 14:50:19 +0300</pubDate>
<author></author>
<comments>https://batishchev.ru/blog/all/2013-04-05-15-50-19/</comments>
<description>
&lt;p&gt;📍 Location: &lt;a href="https://maps.google.com/maps?q=57.7654783691,40.931469501&amp;amp;ll=57.7654783691,40.931469501" target="_blank"&gt;Kostroma&lt;/a&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://batishchev.ru/blog/pictures/260070279_427337480635966374_2013-04-05_11-50-19.jpg" width="612" height="612" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Админский феншуй #root #linux #russia #sysgod #васяездитпопланете #васяездитпоруси&lt;/p&gt;
</description>
</item>


</channel>
</rss>