← на главную

Лайвлупинг, медиапродакшн и все эти ваши компьютеры

Алексей Батищев. Заметки обо всём, что происходит со мной и окружающим миром

Важные теги: Мои видео и другие работы, Забрать своё из облаков, Кровавый Энтерпрайз на коленке

ArrayList и производительность массивов в Powershell

Powershell — язык весьма великодушный к программистам, почти всё в нём делается легко, интуитивно, и не требует особой подготовки и продумывания от автора кода. Однако, при выходе на объемные задачи начинают выстреливать некоторые вещи, которые для удобства изначально выполнены неэффективно.

По одной из задач мне требовалось обрабатывать большие объемы данных (сотни тысяч и миллионы строк таблиц). На тестовых множествах всё работало хорошо, но на прод данных скрипт начинал работать непозволительно долго. Я провел профилирование и выяснил, что с ростом количества данных всё больше времени (с нелинейным ростом) начинает занимать операция добавления элемента в архив.

$array = $array + $newElement — что может быть интуитивней? Оказалось, массивы в Powerhsell это имутабельные объекты, и поэтому предыдущий код фактически создает новый неизменяемый объект из всех элементов предыдущего массива и одного нового. Конечно, на больших объемах массивов такая операция будет занимать всё больше времени, и нелинейный рост вполне объясним. Этой неэффективности лишен специальный тип данных ArrayList — это тот же массив, разве что элементы добавлять самым очевидным способом через «плюс» в него нельзя.

Вот код, на котором я проверил время работы цикла из добавления N случайных строк к массивам в умолчальном варианте и варианте ArrayList

На 10 тысячах операций результаты примерно похожи — отличаются в десятки процентов. Но уже на сотне тысяч разница — на порядок. При этом время работы через ArrayList растет линейно вместе с количеством циклов, а у классических массивов — экспоненциально

Вот такие тонкости вскрываются спустя годы работы с языком. С другой стороны, это хорошо характеризует его в положительном плане — сколько за это времени гигабайт csvшек и джейсонов было перелопачено без этих ваших ArrayList?!

 1   20 ч   PowerShell

Казанинг-2021

Этот пост провалялся в черновиках почти два года. Но я решил всё же завершить его и опубликовать в январе 2023

Начало

Вторую часть майских праздников в 2021 году было решено пустить на авантюрный автопробег по Приволжскому федеральному округу. На самом деле рассматривались и другие направления, но в итоге победил маршрут, обеспечивающий умеренные прогоны равномерно по дням, и набор городов, которые заинтересовали. Финальный трек получился такой: Москва — Муром — Козьмодемьянск — Йошкар-Ола — Казань — Нижний Новгород — Гороховец — Москва

Муром и Козьмодемьянск

Выехать из Москвы постарались пораньше, но всё равно несколько раз застревали в пробках на Горьковке, иногда слушаясь экспромтов Алисы и обьезжая их короткими или длинными крюками. На одном из таких объездов, уходя от пробок на обьездной Владимира, оказались неподалёку от Мурома — и спонтанно решили заехать, пообедать и осмотреться.

Городок показался небольшим, но уютным. Неустроенная набережная с такими же авто-туристами и котами, причесанный под праздники центр, местная торговля, кафешка с высоким рейтингом из трипадвизора, оригинальная еда и изящная ошибка официантки, чуть не стоившая нам полуторной стоимости обеда. Прогулялись, размялись и двинули дальше.

Только к 8 часам вечера примерно добрались до Козьмодемьянска. На подъезде к городу машину атаковали майские жуки — как оказалось в последующие дни, это время для них самое летабельное — и летальное в плане встречи с нашей машиной. По возвращении из тура я долго вымывал их высохшие остатки из решетки радиатора и укромных уголков бампера.

Про сам город я слышал давно от подруги, проведшей в нём часть детство — она даже предлагала экскурсию от родственников, которые там живут. Ещё город зацепил географией — я решил что до него как раз будет комфортно дохать за первый день, проникнуться марийской атмосферой, и на следущий день паромом через Волгу телепортироваться в Йошкар-Олу.

Скинув вещи в классном номере свежей гостиницы, пошли гулять и ужинать, предварительно сверив наши интернет-исследования о местных заведениях с информацией тетеньки-хостесс. В итоге обошли по кругу весь Центральный микрорайон, удивились вывескам с незнакомыми словами и разговору на совершенно непонятном языке (и это между молодыми ребятами в винном магазине!), нашли совершенно намертво закрытыми в вечер пятницы два кафе из интернетов, дошли до рекомендованной администраторшей пиццерии — но там в 10 вечера уже завершила работать кухня (очевидно, повара отправились на виллы роскошествовать на заработанные непыльным трудом миллионы). Благо, в поисках кафе мы благоразумно заглянули в Пятёрочку, а поэтому ужин краковской колбасой в комнате отеля скрасил фиаско — хоть и не смог полностью сгладить обиду.

Утром доехали до пристани чтобы выяснить режим работы парома — найденный в интернетах телефон не отвечал (вообще тотальное несовпадение интернетов и реальности уже тогда стало очевидным). Выяснив, что с переправой проблем нет, мы все же решили прокатиться по городу, поглазеть на улицы и заглянуть в музей марийской культуры под открытым небом. Приехали на парковку, подошли к запертым воротам — соседняя калитка приоткрылась, высунулся бородатый мужик, и буквально цитируя легендарный мем сообщил нам что музей не работает, и вообще нас тут не звали. Это стало последней каплей: очевидно, любовь с городом не сложилась, и нам пора расстаться.

Переплыли на пароме Волгу (идёт 20 минут, человек 30р, машина 440), за это время к нам присоседились двое местных, попросили подкинуть до своих деревень что по дороге. В салоне разговорились, в целом всё как везде — разруха, делать нечего, лес воруют, вот и с транспортом тоже беда, приходится на попутках. Местные собирают ягоды и грибы, сдают, этим и живут. Мужика высадили километров через 30, тётушка проехала дальше и вышла на перекрестке ловить другую машину — в сторону от нашей трассы ей еще километров 50 оставалось. Кстати, зимой в районе Козьмодемьянска реку переходят пешком или на авто, а в межсезонье переправы нет вообще, не ожидал.

В Марий-эл впервые по дороге поймали местное радио — непонятно вообще ни слова кроме русских заимствований и фамилий, натурально «хырлым бырлым карбума редактор Елена Сидорова бармаше курбейды». Забавно и очень непривычно — считай, от Москвы день пути и такая экзотика!

Йошкар-Ола

Довольно быстро домчали до Йошкар-Олы — там планировали погулять, пообедать, и к вечеру уже быть в Казани. Центр города перекрыт на репетицию торжеств, всюду музыка, украшения и люди (в основном дети и молодёжь) в разнообразной форме — так понимаю, участники парада. Немедленно сфоткались с йошкиным котом.

Прошлись маршрутом из статьи Тинькофф журнала — об особенностях дизайна центра города я был осведомлён, а вот Натали сильно удивлялась прянично-сувенирным кварталам, ярким краскам и клону Спасской башни , посмотрели на город с колеса обозрения (новёхонькое, с кондиционером и подогревом), прошлись через набережную, квартал Брюгге и мимо арены до ресторана национальной кухни из рекомендаций.

Выяснилось что место Трактир Тёплая Речка ультрапопулярное, и нам как не бронировавшим столик в итоге отдали целый отдельный кабинет на втором этаже: еду пришлось ждать долго, зато сидели по-царски. Национальная кухня оказалась вполне себе знакомой русской, с местами необычными ингредиентами или названиями — не вареники, а Подкоголи, жаркое в горшочке — обычный картофель и овощи с мясом в бульоне, но с лосятиной, и так далее. Удивил салат из битой репы, с яблоками, сметаной и кедровыми орехами — действительно необычный и продукт и комбинация вкусов.

Нужно отметить что мы уезжали из дождливой Москвы и не особо рассчитывая на погоду, но и в первый день (большей частью проведённый за рулем) и во второй день в Йошкар-Оле нас сопровождало яркое солнце. Но сидя в трактире, мы увидели черные грозовые тучи, и поспешили ретироваться. В темпе прошлись обратно до до набережной, сфоткали Спасскую башню и сели в авто и рванули в Казань.

Дорога вышла отличная, за исключением последнего участка — как оказалось потом, там нормальная трасса, но в тот день была большая пробка и Алиса предложила объехать — и мы ровно то же самое время медленно петляли по промзонам между железной дорогой и Волгой, среди дач и белых приор. В итоге доехали, запарковали машину на следующие дни во дворе отеля, и пошли гулять по Казани

Казань

Натали давно хотела попасть в город, я в Казани уже был (#Казанинг) — тем интереснее было ловить флешбеки и сравнивать ощущения. Первый вечер отдали гулянию по улице Баумана: слушали музыкантов, уворачивались от самокатчиков, заглядывали в магазины чакчаков и айфонов, прокатились перегон на метро. Кафешки начали закрываться, в итоге мы сели в какую-то шашлычку — мне понравилось, а Натали опять с едой не повезло (это вообще был тренд путешествия, который сумел преломить только Нижний Новгород). Добрели до отеля, по дороге видели как в соседнее здание, заговорщически оглядываясь и звоня в домофон, зашла ночная бабочка — все бы норм, но весь следующий день из окон особняка раздавались песни кришнаитов, и теперь мне очень интересна судьба этой девушки. Отель Берисон так себе (особенно после Козьмодемьянска) — но мы видали и хуже. Без задних ног упали спать.

Во второй день гуляли по городу, купеческому району, завтракали в элитном кафе с крутонами ручной работы.
После вернулись на Баумана, поднялись на колокольню, провели пару часов в музее советского быта (моя бесконечная любовь), взяли самокаты и прокатились сначала по крутой вебдванольно-хипстерской набережной, а потом через дамбу к дворцу бракосочетания Казан. Поднялись наверх и позалипали на удивительно жарком для весны солнце. Вернулись пешком в район отеля.

Вернулись в отель, отдохнули и отправились ужинать в (предположительно) крутой ресторан на верхнем этаже одного из местных небоскрёбов. Ужин был прекрасен, отчаянное караоке в исполнении посетителей — зубодробительным, но в целом посидели неплохо. Вызвали такси, приехал чуднОй парень-мизантроп, мы потерпели его матюки до ближайшей знакомой улицы, и сбежали пешком в отель

Нижний Новгород

На следующий день рванули из Казани обратно в сторону Нижнего. Город встретил нас тотальной перекопкой и озабориванием всего и всея (сказалась подготовка к юбилею), усугублёнными дождём и туманом. Заселились в гостиницу, пошли гулять, перепрыгивая через траншеи и обходя лужи, добрались до пешеходной улицы (буквально уничтоженной перекладкой брусчатки, которую — и я помню это — совсем недавно положили). Кое как добрались до Кремля, который — о сюрприз — тоже был перегорожен, сбежали из него на набережную в надежде посмотреть салют.

О, эта эпическая история про салют. Дело в том, что действие сюжета проходит в пору Неумолимой И Типа Действенной Борьбы с Ковидом Всеми Тупыми Способами (НИТДБКВТ). Напомню, на дворе майские, майские это салют, салют это толпа, толпа — это опасность заражения (тут провал в логике если честно, ибо толпа она на свежем воздухе). Какое решение принимает администрация города? Может отменить салют совсем? Может, понять тупость вводимых ограничений? Нет, она принимает единственно верное по неведомой логике решение — скрыть место запуска салюта. В итоге, весь город равномерно распределяется по набережным (коих в Нижнем в результате слияния Волги и Оки немало), и стоит, напряженно вглядываясь и вслушиваясь сквозь стопроцентно непроглядный туман, где же, ссука, обещанный салют (и будет ли он вообще).

Салют в итоге был, совсем не в нашем районе — мы стояли на Верхне-Волжской набережной, а пуляли в районе Оки. Мы, вместе с тысячами таких же бедолаг, разглядели в молоке тумана далекие отсветы и глухие бульканья, и разочарованные ушли восвояси. А ушли мы в кафе Три апельсина — и это, ребята, был фурор. Кафе ожидаемо было переполнено, но нам милостиво без записи выделили столик и предупредили что всё готовится медленно, на что мы попросили что-то готовое чтоб не ждать — и в итоге чертовски насладились салатами в китайском стиле и невероятным (лучшим во всей моей жизни, я серьезно) фирменным десертом Три апельсина. Вспоминаю этот ужин регулярно.

На следующий день с утра вернулись на Большую Покровскую, позавтракали в одном из кафе, прыгнули в машину и поехали. По дороге я решил сквозануть знанием местных красот и показать Натали вид с высокого берега набережной — увы, в переулках по пути нас встретила бесконечная строительная техника, забор и знак кирпич. Я понял, что город не готов показать себя,и сдался. Помчали в сторону дома

Гороховец

По пути к Москве заехали к родственникам в Гороховец — посидели с семьёй в гостях у крёстной и двоюродной сестры, забежали в гости к племяннице, посмотрели на её невероятную плантацию фиалок и домашний зоопарк. Было хорошо

На дальнейшем пути проехали через эпический ливень — наверное, самое лихое из дождей что мне встречалось на дороге: трасса тупо встала потому что ехать было нереально. Пообедали в придорожном кафе тру-шашлыком для дальнобойщиков (огромные кремированные куски мяса на кости, пластиковые тарелки и столы с клеёнкой). На подъезде к Москве поймали пробки, и уже затемно ввалились домой.

Итого

За пять дней знатно накрутил спидометр, понял что дальние путешествия с надёжным напарником это совсем нестрашно, страна интересная и очень разнообразная даже в пределах нескольких сотен километров.

В очередной раз убедился что больше 3-4 часов за рулем проводить физиологически не могу — тотально падает концентрация и тупо расфокусируются глаза. Ну когда в запасе напарник, способный подменить на час-другой, это всё не беда.

Было очень хорошо

Забрать своё из облаков: kenk-vk-enricher 1.4

Допилил скрипт обогащения дампа Вконтакте. Теперь скрипт качает видео в разделах Видеозаписи, Стена и Сообщения — закачка идет через yt-dlp, перед использованием желательно обновить его до свежей версии, и залогиниться в ВК в одном из бразуеров на машине, тогда yt-dlp сможет использовать куки и больше видео будет доступно для скачивания. Также скачиваются аттачменты типа «файл» на стене и в сообщениях (те, что доступны по прямым ссылкам).

Сейчас актуальной версией скрипта мой личный профиль выкачивается на почти 200 гб, сказываются видео файлы в переписке и на стене — часто репостились интересные чужие видосы, и всё вместе занимает прилично места. Ну да больше-не меньше.

Скрипт на гитхабе: https://github.com/alexbatishchev/kenk-vk-enricher

Слава роботам!

Такой Макар — Live Stars 2022

Отпускаю в мир еще один долгострой — летний концерт группы Такой Макар в московском клубе Live Stars.

Час с небольшим отличной музыки от восхитительных гранж-хулиганов из Рыбинска. Бесконечно люблю, верю в ребят, очень жду новой встречи. Смотреть на ютубе по ссылке:

Всем телекастер, посоны!
#такоймакар #васяходитнаконцерты

Такой Макар в сети:
https://band.link/takoi_makar
https://vk.com/takoi_makar
https://music.yandex.ru/artist/5920453
https://www.youtube.com/channel/UCb35...

Александр Макаров — гитара, голос
Михаил Куликов — барабаны
Евгений Жуков — бас
Антон Тихомиров — звук

Снято на GoPro Session
Использованы материалы Дмитрия Чистякова и других зрителей концерта
Фото на обложке https://unsplash.com/@jorikkleen

Забрать своё из облаков: важные видео из YouTube — 2

Спустя полгода после запуска велосипедика для автокачания и сохранения важных видосов, провёл аудит его работы и немного допилил.

Во-первых, за прошедшее время скриптом в архив было скачано несколько видосов, которые уже недоступны в интернете — часть удалили авторы, а часть сгинула вместе с каналами, удалёнными администрацией йутуба в баталиях нового чудного времени цензуры и культуры отмены. Помещать интересные (а особенно острые и потенциально скандальные) видосы в плейлист для сохранения стало привычкой.

Во-вторых, всплыла интересная особенность этого вашего СЕО и кликбейт-традиций: авторы на ютубе нередко переименовывают ролики, иногда (как например вДудь) — после добавления субтитров и других изменений, а иногда — просто чтобы новые названия привлекали внимание зрителей и обманывали алгоритмы. Так как в шаблон именования файлов я внёс название ролика, это приводило к тому что часть роликов повторялась несколько раз — а видос с одного канала (крутой по содержанию документальный фильм про советскую мультипликацию, кстати), закачался аж 6 раз, в соответствии с каждым почти ежедневным переименованием.

К счастью, в шаблон имени файла я с самого начала добавил ID ролика, и по ним дубликаты можно легко находить. Добил скрипт закачки несколькими строками, находящими в архиве файлы с одинаковыми ID внутри имён и удаляющие самые старые файлы — и дело в шляпе

В-третьих, оказалось что место видосиками жрётся весьма стремительно — а я по старой привычке выбрал для хранения максимально возможное качество. Подумал над вопросом, и решил что в подавляющем большинстве случаев содержимое вполне воспринимается и в невысоком качестве, и в качестве разумного компромисса выбрал скачивать вариант 720p. В первую ночь видосики с новыми параметрами перекачались, дубликаты удалились, выигрыш по месту вышел очень приятный.

Машины работают, человек счастлив. Вернусь к вопросу через следующие полгода

Забрать своё из облаков: kenk-vk-enricher

Причесал и опубликовал скрипт, докачивающий в дамп официальной выгрузки из ВКонтакте картинки в переписку (сообщения) и фотоальбомы. Фотки выкачиваются и складываются заодно внутрь дампа в папки с именами, соответствующими оригинальным альбомам, а если они были опубликованы с подписью (как например часто было при параллельной публикации в ИГ) — подпись сохраняется в отдельный текстовой файл рядом.

В дампе переписке все файлы даются прямыми ссылками. А вот в дампе стены картинки прописаны ссылками вида https://vk.com/photoXXXXXXXXX_XXXXXXXXX — но тут был придуман хитрый ход, немного исправляющий ситуацию. Так как среди фотоальбомов есть «Фотографии на моей стене», то если сдампить их и из кода страницы выдернуть и прямые ссылки на файлы, и ссылки photoXXXXXXXXX_XXXXXXXXX (которые там есть), то можно закешировать это соответствие и подставить потом известные картинки в код выгрузки стены. К сожалению, так можно обойти только картинки, и только картинки ваши — репосты от других пользователей или групп так и останутся со ссылками на данные в серверах ВК. Как до них добраться без URL оригинальных файлов непонятно — с парсерами картинок ВК в интернете такая же беда как и с видео. Хотя жаль, стену со своими публикациями хотелось бы содрать в максимально полном виде, включая и репосты.

За недолгое время с прошлой публикации yt-dlp успел разучиться качать видео из вк, и вновь научился этому в свежем апдейте — похоже что война апишников с реверс-инженерами идёт денно и нощно. С учетом этого, выкачку видео пока думаю не реализовывать.

Забавное наблюдение — в дампе стены есть уже удалённые вами сообщения (с пометкой «Запись удалена»). Так приятно что заботливые товарищи всё хранят даже после удаления (евпочя).

КЭНК! Слава роботам!

Ёлочные игрушки: начало

Около полутора лет я плотно использую в работе ELK Stack. Хочу в серии постов рассказать о том, как можно применять Elasticsearch, Logstash, и Kibana для сбора и анализа информации в различных задачах системного администрирования и управления информационной безопасностью на предприятии.

Ложь, наглая ложь и статистика

Часто в работе системы, которыми мы управляем, дают информацию о своем текущем состоянии, но не хранят (или хранят в неудобной или неполной форме) историю этого состояния. При этом, решая задачи по изменению и улучшению инфраструктуры, важно понимать не только где мы находимся, но и то, куда и с каким прогрессом мы движемся.

Формулирование таких метрик и понимание их изменения помогает сразу по нескольким фронтам. Во-первых, исполнитель всегда может оценить прогресс и наглядно продемонстрировать руководству что и насколько улучшено (или ухудшено), с актуальными «здесь и сейчас» цифрами. Ура, нет больше ночных бдений «срочно предоставить к утру отчет о том что сделано по этой проблеме»

Во-вторых, самому сотруднику для профилактики выгорания и получения обратной связи о своей работе важно иметь возможность оценить, что и как изменилось в результате его труда. Это особенно важно в эксплуатации и настройке систем, где часто нет четкой финальной точки (типа «построил дом — завершил проект»), а есть бесконечный непрерывный процесс, и без понимания его прогресса может возникать впечатление что работа не приносит результатов, что она неисчерпаема и как будто топчется на месте.

Предположим, внедряется процесс управления учетными записями в AD — настраиваются политики, вычищаются старые или ненужные записи, настраиваются параметры безопасности. Как оценить насколько сегодня ситуация лучше чем была месяц назад? Безопасник нашел и поставил задачу исправить N записей, за это время админы сделали M новых, что в целом по ситуации? Какова её оценка и как она изменилась?

Другой практический пример — управление обновлениями Windows хостов при помощи WSUS. Насколько сегодня уровень покрытия инфраструктуры апдейтами лучше чем два месяца назад? Не стало ли хуже из-за раздолбайства смежных подразделений, или выхода апдейта с ошибками установки? Ситуация в целом исправляется или наоборот, движется в ад?

Конечно, такую статистику по выбранным метрикам можно собирать по случаю вручную, строить графики в экселе или другом средстве ручной аналитики. Но зачем, если можно заставить работать роботов и получать актуальный результат автоматически и в любой момент?

Достаём подарки из-под ёлки

Основная идея этого kenk-велосипеда заключается в том, чтобы регулярно и автоматически собирать (или выгружать) из информационных систем данные, и после этого хранить и анализировать их с помощью ELK Stack.

При этом появляется возможность анализировать состояние систем в исторической перспективе, видеть тренды изменений и контролировать соблюдение заданных ключевых показателей. Кроме того, появляется возможность собирать или генерировать другую информацию, недоступную через штатные средства управления этими системами — потому что перед загрузкой в ELK, данные можно дополнительно обработать, обогатить сведениями из других систем и так далее. Например, можно дополнить статистику из WSUS данными из учетной системы предприятия об ответственных за сервера, и иметь возможность сразу видеть кого нужно пнуть за необновлённый сервер.

В результате внедрения подобной системы у инженера или руководителя подразделения появляется инструмент, позволяющий видеть прогресс по процессам, а также искать данные состояния системы в исторической перспективе. Кроме того, данные из разных систем предприятия при этом обретают связь и дополнительный тюнинг в соответствии с ландшафтом инфраструктуры.

Картинки и примеры

Приведу пару визуальных примеров. В картинках ниже конкретные цифры (показатели) и временные отметки на скриншотах удалены по причине NDA

Пример 1. Графики изменения во времени на группе хостов метрик «процент обновлённых назначенными патчами машин» и «процент машин, требующих перезагрузки для завершения обновления». Вы никогда не получите эти данные из WSUS, потому что он не хранит историю состояний хостов

Пример 2. График изменения во времени на группе хостов количества установленных экземпляров Chrome разных версий. Здесь красиво видно, как по мере выпуска патчей одна версия Chrome сменяет на группе хостов другую. Вы не получите эти данные, если ваша система учёта ПО на хостах этого не умеет (данные для графика получены из отчетов Kaspersky Security Center)

kenk-дисклеймер

Внимание! Этот подход рожден и работоспособен в условиях, когда у вас есть набор информационных систем, возможности которых недостаточноы для решения озвученных задач. Если ваша система всё это может, и в условиях дивной новой реальности вы можете эту систему купить :), сий велосипед не для вас.

Также, в полном соответствии с kenk-доктриной, решение потребует кровавого програминга на коленке и применения прочих костыльно-пластилиновых технологий. Если вы не готовы к таким жертвам — решение не для вас

 47   1 мес   ELK   Ëлочные игрушки   КЭНК

Забрать своё из облаков: вконтакте

Как я писал в одной из первых заметок цикла, ВК не позволяет полноценно выгрузить из себя пользовательские данные. Запросив выгрузку на странице https://vk.com/data_protection, через некоторое время пользователь получает относительно небольшой zip архив, внутри которого расположен набор слинкованных html страниц без медиафайлов. Сами медиаматериалы (изображения и видео) в архив не попадают — указаны только либо ссылки на исходные объекты в ВК, либо фото (или превью видео), которые подгружаются с серверов ВК в интернете. Интересно, что при этом другого динамического или внешнего контента нет — css уже положены в папку, а из javascript внутри страниц только несколько обработчиков onclick без внешней загрузки.

Я изучил сторонние парсеры, которые опубликованы в интернете. Всё найденное страдает схожим набором недостатков. Нужно давать доступ к странице (или открыть её для всех, чего я делать не хочу). А ещё все подобные инструменты быстро устаревают в условиях постоянно меняющихся верстки сайта и механизмов авторизации — например, чудо-комбайн для загрузки видео yt-dlp в этом году несколько месяцев не мог качать видео из ВК после очередной смены алгоритмов сайта.

В общем, спустя некоторое время поисков я решил пристальней взглянуть на выгрузку, выдаваемую ВК, и обнаружил что фотографии в коде выгрузки даются прямыми ссылками на полноразмерные источники, которые ещё и работают без авторизации на сайте. А значит, пройдя по коду страниц, можно выкачать исходные фотки, и дальше сделать с этим что-то.

Пока я придумал два варианта — сгрузить фотографии на диск в каталог внутри оригинальной выгрузки и поменять ссылки в тексте страниц (фотоальбомы, чаты, стена) так, чтобы всё открывалось локально. Второй возможный вариант — сгрузить фотографии из фотоальбомов в файловую систему отдельно, повторив папками структуру исходных фотоальбомов на сайте. Первый вариант в черновом виде уже реализовал быстро на powershell, но для публикации его нужно причесать.

Также, пока работает yt-dlp, можно попробовать выкачать им видео, и заменить ссылки в дампе на скачанные файлы (это будет посложнее, будет завязано на работоспособность yt-dlp, и точно не позволит скачать часть видео без авторизации yt-dlp в ВК)

Думаю как быть дальше.

КЭНК: безопасно храним секреты для скриптов PowerShell

Часто из скриптов PowerShell нужно обращаться к системам, требующим аутентификации — например, для парсинга данных о хостах из корпоративной системы мониторинга, или для выгрузки данных об уязвимостях из веб-портала системы обнаружения уязвимостей. Также нередко в этих случаях используются учетные записи с расширенными полномочиями во внешних системах, но в целом это не принципиально — любые секреты хочется хранить так, чтобы до них было невозможно добраться злоумышленнику.

Понятно, что харкодить креды в источниках или держать их в конфигурационных файлах скрипта — дело пропащее. Даже если зарезать на уровне файловой системы доступ только для учетной записи, от которой должен стартовать скрипт, остаётся возможность администратору сервера эти права изменить и данные прочитать. Неаккуратненько выходит ©.

К счастью, в Windows есть магическая штука на этот случай — Secure Strings — волшебство которых в данном случае заключается в том, что они работают с учетом контекста учетной записи, от которой запущены. Поэтому, если задать пароль ($pw = Read-Host -AsSecureString) прогнать его через ConvertFrom-SecureString ($pw | ConvertFrom-SecureString) и результат записать в файл, то на выходе будет чудесная буквенно-цифровая белиберда. А обратно эту белиберду можно превратить в пароль (Get-Content .\password.txt | ConvertFrom-SecureString), но только вот пароль правильным получится только если это преобразование работает от той же учетной записи, под которой шло прямое кодирование.

При запуске скрипта на этом компьютере но от другой учетной записи, при запуске скрипта на другой машине, при смене пароля учетной записи — всегда расшифровка будет завершаться с ошибкой. Да, это создаёт неудобства при смене пароля сервисной учетной записи, от которой стартуют скрипты, и ключевую информацию нужно будет перегенерить — но зато спрятанные таким образом секреты точно завязаны на сохранность пароля от учетной записи и не могут быть прочитаны никем кроме неё.

В своих проектах я использую свою маленькую библиотеку, позволяющую запросить и сохранить данные в ключевой файл в формате JSON, и читать данные из него в скриптах. Но в целом подход прозрачен и его можно реализовывать так как удобно

В интернетах пишут, что в свежих версиях павершелла появились интеграции с системами хранения паролей, но до этого мои руки пока не дошли — привычное работает, роботы трудятся, люди отдыхают

Пример кода, иллюстрирующий подход:

Ссылки по теме:

https://www.techtarget.com/searchitoperations/tutorial/How-to-secure-passwords-with-PowerShell
https://www.travisgan.com/2015/06/powershell-password-encryption.html

Слава Роботам! КЭНК!

 55   3 мес   PowerShell   КЭНК
Ранее Ctrl + ↓