← на главную
26 заметок с тегом

все эти ваши компьютеры

Алеша и программирование — 2

Продолжаю ностальгировать по языкам программирования

Java

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

По учебе на яве были писаны курсовые и лабораторки, а главная шутка и байка тут — про курсовую, которую я написал для однокашника С. , и которую тот, ни разу не появившийся на лекциях и семинарах, пошел сдавать. Он был невероятно талантлив в вопросах сдачи неизученного, и поэтому перед зачетом подробно расспросил у меня весь алгоритм программы. Конечно, преподу С. на все вопросы по тексту программы ответил, тут мол создаем массив, а здесь мол идем по циклу. Поняв, что этим его не пронять, препод задал вопрос-фаталити: «а как эту программу запустить?» С., ни разу не запускавший самостоятельно ничего со школы, ответил привычно — «Контрол Эф Пять», и был немедленно со сдачи выгнан.

Javascript

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

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

PHP

PHP стал для меня в начале 2000-х окном в мир веб-разработки, в итоге на нём за много лет было запилено около двух десятков сайтов. Применялись и Joomla, и Drupal, и MODx, и конечно в какой-то момент был сделан собственный движок — потому что каждый программист PHP обязан за свою жизнь написать хотя бы одну CMS.

Среди работ были и несколько версий сайта семейного центра, сайт элитного часового бренда с крутейшей системой генерации картинки на лету в разделе «примерка», сайт нашего DIY-музыкального комьюнити U-CLUB (о да, у нас самодельный клуб и продакшен с образовательным и развлекательным контентом для ютуба ещё до того как это стало мейнстримом), сайт одного гитариста-виртуоза и его школы, визитки предприятий и интернет-магазины, и куча всего ещё. Большинство сайтов уже модернизированы или мертвы (ах, как меня расстраивает эта изменчивость веба), но кое-что работает до сих пор, как ни удивительно.

Lua

В середине 2000-х популярной была Direct Connect — p2p технология обмена файлами в локальной сети. Сервер для этой сети можно было запустить на виндовой программе PtokaX, которая поддерживала ботов на Lua. Документации по API хаба для бота не было совершенно, зато был чужой готовый бот, изучая и модифицируя исходный код которого, я написал в итоге свой (и попутно изучил Lua). Это был увлекательное приключение длиной почти в год, на выходе был уникальный по тем временам комбайн, следивший за чатом (анти-флуд, анти-мат и антиспам), добавляющий сервисные сообщения и прочие улучшайзеры для пользователей (моя любимая тема — роботы работают на пользу человеку). Также бот умел, благодаря придуманным ноу-хау, следить за обьёмами раздаваемого пользователями, чтобы добавить в изначально анархический и бесконтрольный мир DC++ немного управляемой справедливости, и дополнительно этим развивал сеть. В итоге бот ушел в народ, и ещё несколько лет назад на указанную в тексте почту приходили вопросы от админов по его работе и модернизации.

VBS

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

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

В итоге фокус с VBS в работе перешел на powershell как только тот стал достаточно распространённым на машинах клиентов на предприятии — а вместе с ним и в быту он стал для меня основным.

Powershell

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

С углублением в область практической кибербезопасности для PS нашлось много новых применений — кроме привычной автоматизации рутины, на нём пишутся различные тулы для исследования инфраструктуры, управления угрозами и интеграции между системами, и фактически на нём написано 90% ядра системы управления уязвимостями, которая сейчас работает на предприятии. Ну а дома, в быту, на павершелле пишутся скрипты, переименовывающие файлы сьемок концертов c GoPro и фотиков, медиа-кодировщики, забираторы своего из облаков и бэкаперы, и куча всего другого полезного.

Python

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

Подробно сам python я разобрал во время марафона Яндекса в этом году — занятная и удобная для многих штук вещь оказалась.

Shell

Вообще я не большой любитель unix-систем, мне приятней и удобней за десятилетия встроившиеся в мозг привычки, софт и прочие атрибуты винды (например, меня бесит дизайн и динамика движения курсора мыши в оконных менеджерах Linux, это непросто объяснить — но бесит неимоверно). Но в современном мире без линукса никуда, а значит и автоматизировать всякое на нём и shell придётся. Главное, чтобы задача была. Так, однажды я за вечер написал на shell аналог Fail2Ban для системы которую мы поддерживали — классический вариант, смотрим кого в логах сейчас слишком много и неправильно, и обновляем сетевые правила (в нашем случае — конфиг HAProxy). Идеология линукса «всё-файл» для задач бытовой и наколеночной автоматизации прикольна, и shell в комбинации с утилитами дает хороший простор для манёвра, с достаточно низким порогом входа

Микро- и недо-программирование

Вообще, программирования в нашей повседневной жизни теперь очень много, хоть и не все об этом задумываются. Хотя, нутром это многие понимают — так, еще лет 15 назад к нам в отдел заходили бухгалтерши с просьбой «Ребят, вы же программисты? Запрограммируйте чтобы кондиционер за полчаса до нашего прихода включался и кабинет охлаждал!». Так что, с учетом доступности этих инструментов и моей тяги к автоматизации, постоянно и незаметно применяется много всякого недо-программирования:

  • Автоматизации в IOS (актуальная задача в дивные новые времена — автозапуск и автостоп VPN при открытии на телефоне определенных приложений)
  • Скрипты для Automator — языка (сервиса) автоматизации macOS. Делал на нём всякие переименования файлов и удаления старых выполненных задач из приложения Напоминания
  • скрипты преобразования файлов, расстановки меток и прочего для монтажки VEGAS
  • батнички в винде — люблю автоматизировать рутину, и если что-то можно сделать одним кликом, потеряв день на программирование — обязательно сделаю так. Например, сохранившее мне миллионы миллисекунд жизни решение для выноса часто нужной команды архивирования 7Zip в контекстное меню Проводника
  • бытовое программирование через сценарии для Алисы и других средств управления умным домом. Обожаю сообщать «Алиса, я пришёл» и смотреть как зажигается свет и включается любимая музыка

Подводя итог теме, хочу еще раз восхититься и признаться в любви к программированию. Когда-нибудь у программистов точно получится «make world a better place». Слава роботам!

 37   3 мес   все эти ваши компьютеры

Алёша и программирование

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

Между тем, идея о том что можно заставить электронных болванов делать рутинные, сложные, скучные или невыполнимые для человеков вещи, всю жизнь меня будоражит, и я всегда ищу этому применение. Ярчайший пример — девайс Вадима Смирнова Smirnov Electronics Whammy D2, заставляющий гитарную примочку Whammy переключать режимы в темпе, который недоступен человеку гитаристу — и вот уже возможности кожаного мешка безгранично расширяются услужливой железякой с питанием в 9 вольт, не страдающей от характерных для рокеров запоев, творческих кризисов, и паталогического опоздания на репетицию. Внутре у ней — программа, а всё (от схемы до той самой программы) сделано гениальным сибирским чуваком! Ультравосторг!

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

Бейсик в пк Правец

Бейсик для болгарского компа Правец, который стоял в школьном классе информатики — до сих пор помню команды HPLOT и прочие с H-префиксом. Первые эксперименты типа викторин «вопрос-ответ» и рисования фигур в графическом режиме.

картинка из интернетов, я уже не помню как он выглядел

Бейсик для Спектрума

Буквально пару раз писал на нём что-то в гостях у Сани, в ожидании и фантазиях о покупке своего Спектрума — какие-то приколюхи уровня «нажмите 1 если вы козел, и 2 если осёл. Поздравляю, вы осёл». Что-то в языке отличалось, но не смертельно. Спектрум мне в итоге не купили, изучить подробно язык не сложилось.

Ассемблер для Электроники 8086

Это отдельная, одновременно печальная и смешная история про первый комп, который мне подарил друг Вася. Комп был по тем временам уже сильно устаревший, а CGA монитор в комплекте с посаженной трубкой, поэтому из 4 градаций яркости монохромного экрана была доступна только одна, да и то ночью в полной темноте. В оригинальные игры (а на дискетах в комплекте были Space Quest, Larry и прочие радости) было нереально играть, поэтому я освоил ассемблер и стал писать свои игры, используя только два цвета (точнее, полную яркость пикселей и её полное отсутствие). Были викторины, были угадайки, была ходилка по лабиринту с построением его в текстовом режиме из самостоятельно сгенеренного шрифта, где были символы для разной формы стенок. Исходники и бинарники где-то есть до сих пор, но так как все тайминги были рассчитаны эмпирически под производительность процессора, и игры написаны довольно примитивно, так что уже на 80486 это всё работало неиграбельно быстро. Сейчас полез в интернет и понял, что как выглядел тот комп я совершенно не помню — в голове остался только тёмно-серый цвет блока.

GW-BASIC

Восхитительная тема — бейсик от майкрософт, который можно было компилировать, и в который можно было подключать библиотеки. Тогда у меня уже появился 486 комп c SVGA экраном, и возможности были практически безграничны. Друг Макс написал на языке «cи минус минус» драйвер для мыши, а я на GWBASIC нафигачил несколько приложений с её применением — графический редактор, игру типа 4-в-ряд (с оригинальной идеей, когда в клетках были цифры от 1 до 9, а сгорали дающие в сумме случайное для этого хода число), и тому подобное. На нём же писал проги на городских и областных олимпиадах и в областных лагерях программирования в центре Байтик в Троицке (привозя интерпретатор и компилятор с собой на дискетах). Помню что компилируемый бейсик тогда была редкая штука.

Magician of mathematics, 1996. Have a nice brain!

Бейсик для школьных компов

Это был какой-то диалект бейсика, встроенный в школьные бездисковые машины на базе 80286. На момент 11 класса мы с Максом были уже знатные хакеры, поэтому за урок успевали набить приличные программы, от учебных (для нас элементарных) до гонялок-стрелялок пикселами на два человека. Была классная история, когда мы написали простенький демонстратор страницы в псевдографике с сообщением «Внимание! Идёт форматирование жесткого диска! Не отключайте питание компьютера» и бегающим туда-сюда прогресс-баром. Программу мы успели запустить на первой паре на нескольких компах, а уже после четвёртой встретили преподавателя Степана Васильевича, который попросил нас посмотреть «что там с машинами происходит». Уровень Степана Васильевича (при всём уважении) был таков, что распознать фейк о форматировании диска на бездисковой машине, он сам не смог.

Кодим с Максом что-то за теми самыми 286 машинами. Справа в кадре Степан Васильевич

Pascal

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

что-то считаю для алгебры в школе

C и C++

Тут была куча проектов на учебе и первой работе. Клиент-серверное ПО, разбиралки сетевого траффика, программы с GUI на  Borland C++ Builder, очередной домашний каталогизатор дисков с фильмами и музыкой, и даже серверная часть новаторской геолокационно-социальной сети CU, на старте которой меня позвали поучаствовать в проекте друзья.

Игра в быки и коровы, и очередная прикладная вещь — генератор номеров страниц, чтобы печатать из ворда в альбомном режиме тексты для последующего сшивания в брошюры

Там ещё много всего, продолжу ностальгировать в следующем посте

 32   3 мес   все эти ваши компьютеры

Powershell и странненькое с TimeSpan

Авторы Powershell, с одной стороны, многое в своём творении придумали системно и логично. С другой стороны, постоянно натыкаешься на странности, объяснения которым в области логики не найти.

Любимый пример — класс TimeSpan, временной промежуток, отрезок времени между двумя датами. У объектов этого класса есть несколько свойств, отражающих заданный объектом промежуток времени в разных единицах измерения. И в перечне этих свойств неочевидная логика авторов языка проявляется в полной красе.

Вот свойства Hours, Minutes, Seconds, Milliseconds. Интуитивно думаешь, что это — значение промежутка времени в часах, минутах, секундах, и миллисекундах. Довольно быстро наступаешь на эти грабли, и узнаёшь, что это кое-что другое, а именно количество часов в рамках дня, минут в рамках часа и тому подобное. То есть, если промежуток времени у вас в 1 день и 1 час, то Hours — не 25, а 1. А если между датами прошло 2 часа и 10 минут, то свойство Minutes будет не 2*60+10, а просто 10. Зачем это надо? Ну, наверное для чего-то может пригодиться, хотя я ни разу за много лет эти свойства не использовал. Зато, сколько ошибок в скриптах из-за неверного их понимания я встречал на стековерфлоу и в прочих местах в интернетах!

Окей, столкнувшись с этим (или прочитав заранее в документации, что вряд ли), ты спустя какое-то время познаешь TotalHours, TotalMinutes, TotalSeconds и TotalMilliseconds, с той самой очевидной логикой «полное количество часов между датами» и так далее. Если между моментами времени прошло два с половиной часа, то это будет 2.5 TotalHours, 150 TotalMinutes и 9000 TotalSeconds. Ура, теперь-то всё понятно, можем смело фигачить!

И вот в этот момент, к полному сил и умиротворённому программисту, из-за угла подходят в кепках и адидасе братюни Days и TotalDays, и объясняют, что понятий он не знает, и вообще зря на раён зашел. Ибо Days — это в в натуре полное количество дней (а не как можно было бы по аналогии предполагать, количество дней в рамках года). А TotalDays — это да, это полное количество дней, дробь (типа, аккуратно посчитанное, вкуриваешь?). А Days — грубо посчитанное. Но полное. Почему? Короч, так надо. Кстати, дай позвонить!

И вот, сидишь, смотришь на это, и думаешь — а оно зачем вообще так?? Потом вздыхаешь, материшься, сверяешься с документацией ещё раз, пишешь в коде правильное.

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

Дорогой Вася! Если тебе надо посчитать промежуток времени, юзай TotalDays, TotalHours, TotalMinutes, TotalSeconds и TotalMilliseconds, помни что они — вещественные, и означают то, что тебе нужно. А про другие свойства TimeSpan забудь!

А для вас — картинка, иллюстрирующая всю дичь TimeSpan

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

 20   4 мес   PowerShell   все эти ваши компьютеры

Тренировки по алгоритмам от Яндекса

Вписался несколько недель назад в марафон-контест от Яндекса — лекции по алгоритмам, задачки-домашки, и финальный этап, где за 3 часа нужно решить заключительный блок задач. Совместил приятное с полезным — вспомнил чудесные школьные годы и олимпиады по информатике в троицком Байтике, прокачал знания алгоритмов и систематизировал то, что давно стало привычным в работе, но не было уложено в красивые рамки и точные формулировки «О большое», набил руку в питоне и просто покайфовал, катая трактора по каменистым полям, связывая гвоздики верёвочками и высчитывая идеальные схемы бюджетного питания в выдуманных столовых. Было очень хорошо.

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

Плейлисты с лекциями и разборами домашек на ютубе:
Сезон 2022:

Сезон 2023:

 58   6 мес   python   все эти ваши компьютеры

Архивируем почту из Gmail в Thunderbird

Gmail впервые ввел концепцию ярлыков и тегов в апреле 2004 года, когда сервис и был запущен компанией Google. Ярлыки в Gmail позволяют пользователям категоризировать свои электронные письма в разные группы, что делает управление и организацию инбокса проще. Ярлыки можно присваивать отдельным письмам, а одно письмо может иметь несколько ярлыков, чтобы категоризировать его по нескольким критериям.

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

По совокупности нескольких факторов я выбрал для синхронизации и хранения локального архива почты Thunderbird. При действиях над письмами особый подход гугла показывает себя тут во всей красе.

Во первых, письма классически дублируются в разных папках, если в Gmail на них навешаны несколько ярлыков. Во-вторых удаление писем работает совершенно непредсказуемо: например, письмо может удалиться из одной папки и остаться в другой. Или полностью удалиться изо всех папок в Thunderbird включая корзину — но остаться болтаться в корзине веб-интерфейса Gmail (с ярлыками «Корзина» и остальными кроме первого, из папки которого вы его удаляли). А ещё, Thunderbird показывает папку All Mail — и значит по умолчанию пришедшие письма будут показаны два раза и во Входящих, и в ней. Но удалять письма из All Mail нельзя — они «воскресают» после повторной синхронизации, потому что по логике гугла в All Mail лежит всё и всегда, даже если оно без ярлыков.

Знатная бредятина и непонятное? Это ещё не всё. Описанное поведение — при умолчальных настройках Gmail и Thunderbird. А есть еще и другие варианты — поведение гугла при работе через IMAP описывается разделами в настройках «Когда я помечаю сообщение в IMAP как удаленное» и «Когда сообщение помечается как удаленное и стирается из последней видимой папки IMAP», а сам Thunderbird по умолчанию перекладывает письма в папку удалённые Gmail, но может их и стирать у себя (и передавать команду IMAP на сервер). Надо ли упоминать, что splitbrain с ярлыками тут тоже играет и внятного сценария получить не выйдет, письма продолжат дублироваться и воскресать? На самом деле, область исследований тут на небольшую диссертацию, возможно кто-то когда-то победит.

Хорошо, что мне от Thunderbird была нужна только архивация Gmail в оффлайн (и дальнейшая работа с архивом всей почты скопом) — щас расскажу как это победил.

Усмиряем ярлыкобесие

Итак, необходимо архивировать почту — то есть отбирать по какому-то критерию письма в ящике, синхронизированном с Gmail , и переносить их в отдельную локальную папку внутри базы Thunderbird. Для него это стандартная команда Archive, и с классическими почтовыми сервисами всё работает адекватно — письмо перекладывается в новую папку, из исходной папки пропадает, на сервере удаляется.

С Gmail команда Archive не работает: Thunderbird копирует письмо в заданную в настройках архивирования папку, однако из папки All Mail (Вся почта) оно не удаляется (точнее, пропадает и появляется вновь). Перетаскивание писем через drag-n-drop работает так же — они переносятся в локальную папку, а после синхронизации воскресают в All Mail. Поведение неинтуитивное, пользователи в интернетах ноют и получают рекомендации руками копировать письма, потом их удалять из All Mail, а потом еще и удалять из корзины внутри веб-интерфейса gmail. Но мы заставим работать роботов.

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

  • сделано правило для всех писем, подходящих под архивацию (я архивирую всё, что не отмечено звёздочкой в gmail, и это условие отбора)
  • первым действием в правиле копируются отобранные письма в локальную архивную папку
  • вторым действием в правиле отобранные письма удаляются

Командой в интерфейсе Thunderbird применяем правило на папку All Mail, а после его отработки нужно завершить шаманство, применив команду очистки Empty Trash на папку Thunderbird Корзина — именно так, потому что если зайти в Корзину и удалить письма, Gmail это благополучно игнорирует по своей безумной логике, и IMAP-некромант продолжит свой безумный танец. Почему очистку корзины и удаление писем из неё Thunderbird преобразует в разные для Gmail операции — вопрос к разработчикам Mozilla, это неинтуитивно но ок, просто запомним как мантру.

Кстати, еще один нюанс — переписки (chats), которые gmail хранит в себе, он не отдает в виде сущностей «почтовое сообщение» через IMAP (в отличие от заметок, например). Благо, их у меня в архиве совсем немного (и я не уверен что вообще сейчас этот сервис), но подметил что при синхронизации они недоступны. Выгружу один раз руками.

Такие дела. Слава роботам!

 153   7 мес   все эти ваши компьютеры   Забрать своё из облаков

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

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

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

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

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

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

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

 71   8 мес   все эти ваши компьютеры   Забрать своё из облаков   КЭНК

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

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

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

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

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

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

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

 48   9 мес   все эти ваши компьютеры   Забрать своё из облаков

Обновленный FastStone Image Viewer

В этом году в FastStone Image Viewer запилили несколько знаковых обновлений. Во-первых, базу программы проапгрейдили, теперь она помнит сикстильярд превьюшек, и главное — появился пункт меню, заставляющий программу отсканировать заданные папки и эти самые превьюшки нагенерить. Ура, мой костыль шестилетней давности больше не нужен.

Второе важное изменение — перепилили рендер для HEIC/HEIF, ибо раньше даже на серьёзном железе импортированные с айфона фоточки на компе открывались неприлично для 2022 года медленно.

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

Люто рекомендую, сам пользуюсь FastStone уже не помню сколько лет.

https://www.faststone.org/FSViewerDetail.htm

 24   2022   все эти ваши компьютеры

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

Задача: иметь в оффлайн архиве копии важных видео из ютуба.

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

Над решением задачи трудится комбайн-самокат в составе:

  • отдельного приватного плейлиста SaveMe в моём аккаунте на ютубе, куда мной добавляются для сохранения видосы. Конечно, наиболее прозрачным было бы использование плейлиста лайканых видосов, или, как вариант, встроенного плейлиста «Смотреть позже», но они принципиально не доступны наружу сервиса по политике ютюба, в отличие от плейлистов кастомных. Добавить видос в плейлист SaveMe можно из веб-интерфейса или из приложки на телефоне, это вполне удобно.
  • скрипта, запускаемого по расписанию на домашней машине, в котором стартует натравленный на плейлист SaveMe ультра-качатор yt-dlp (более продвинутый форк youtube-dl). Качатору выданы опциии именования файла по названию, каналу и дате публикации, вшивания субтитров, выбора подходящего качества, и перекладывания файла на шару на NAS.

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

упорядоченный беспорядок в папке закачек. Джейсоны с метадатой не нужны, но пусть будут.

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

 37   2022   все эти ваши компьютеры   Забрать своё из облаков

Забрать своё из облаков: почта

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

Локальный почтовый архив и Крыс

Отличным решением здесь мог бы быть почтовый клиент, синхронизирующий базы с облаками по IMAP. Давным-давно я использовал The Bat, потом носил на флешке The Bat Portable. К сожалению, на текущий момент программа хоть и поддерживается, но перенести её на новый накопитель я не смог: за прошедшие десять лет url страницы на сайте производителя, на который программа перекидывает при процедуре регенерации ключа, изменился, а хакнуть id накопителя я не смог из-за смены файловой системы. К тому же, Крыс выпускается только под винду — а пёс его знает, будут ли в этом вашем пост-апокалиптическом будущем винды.

Thunderbird

Подобрано и протестировано другое отличное решение — Mozilla Thunderbird. Программа кросс-платформенная (базы из виндовой версии прекрасно подхватываются после копирования в Ubuntu, включая русский текст и вложения), бесплатная, под windows есть портабельный вариант. В Thunderbird были подключены все актуальные аккаунты веб-почты, данные синхронизированы, а после бОльшая часть почты перенесена в оффлайн архив (Local Folders в терминологии Thunderbird). В дальнейшем Thunderbird будет в постоянной синхронизации с облаками, а в рамках регулярной рутины полная копия программы с базами будет убираться в дальний архив.

Выводы по итогам переноса

Важные и полезные детали, которые вскрылись не сразу:

  • в настройках надо включить полную синхронизацию данных (а то Thunderbird будет скачивать только заголовки писем и ЕслиЧто вы останетесь без архива, на который рассчитывали).
  • переносить данные в локальный архив нужно через команду Архивирования. В настройках (аккаунт — Copies & Folders — Message Archives — Keep message Archives in — Other) можно включить отдельную архивную папку для каждого ящика, чтобы не смешивать данные
  • ярлыки gmail показываются в Thunderbird как папки, при этом если вы переносите в архив содержимое папки, письма остаются на сервере, но с них снимается соответствующий ярлык — а их у каждого письма как минимум два, AllMail и Inbox/Sent Mail, а то и больше. Важно понимать, откуда берётся куча дублей в итоге, но это решается либо снятием ярлыков заранее — либо использованием плагинов дедупликации для Thunderbird после переноса, либо например архивированием только папки AllMail и удалением писем из остальных

Почта из прошлого десятилетия

Попутно, пока архивировал и разбирал почту, славно поностальгировал по временам своего 20-30 летия: почитал старые переписки, удивился ценам на всякие железа и удовольствия, вспомнил людей и коллег, с которыми не виделся кучу лет. Письма от тех, кого давно нет рядом, и на этом свете вообще — удивительный экспириенс и телепорт.

Еще занятно видеть письма от сайтов и организаций, которых давно уже нет — от магазинов, форумов и прочей онлайн-части жизни в 2010-х. На некоторых сайтах теперь спокойно работают другие конторы (например, дилер и ритейлер Пирит), некоторые заброшены или поменяли контент, превратившись из городских diy-форумов в порталы и визитки. Кстати, надо как-нибудь рассказать про хаб для Direct Connect PtokaX и бота для него HUBBABOT (HUB’s Big Ass Bot), которым я когда-то пытался to Make the World a Better Place в плоскости пиринговых сетей и сетевого общения.

Помню что на этом шоу в Тоннах была дикая давка, я никогда не видел клуб настолько набитым. Сейчас такие концерты стоят 3-5 тысяч
Письмо от сестры — она активно осваивала эти ваши интернеты

В целом на текущий момент так

 33   2022   все эти ваши компьютеры   Забрать своё из облаков
Ранее Ctrl + ↓