Свободу политзаключённым! Донат Медиазоне

Пишу про Индивеб, про компьютеры и программирование, про хобби: кофе и скалолазание, отдельно пишу про разработку подкаст-хостинга.

Posts

19 июля

·

К вопросу о надежности криптографии телеграма: можно было переставлять сообщения местами в обычных чатах, о чем сообщает Security Analysis of Telegram (Symmetric Part).

Там ещё несколько атак, менее практичных.

For most users, the immediate risk is low, but these vulnerabilities highlight that Telegram fell short of the cryptographic guarantees enjoyed by other widely deployed cryptographic protocols such as TLS. We made several suggestions to the Telegram developers that enable providing formal assurances that rule out a large class of cryptographic attacks, similarly to other, more established, cryptographic protocols.

Телеграм не чинит проблемы с безопасностью отдельными релизами и не хочет security advisory:

We were informed by the Telegram developers that they do not do security or bugfix releases except for immediate post-release crash fixes. The development team also informed us that they did not wish to issue security advisories at the time of patching, nor commit to release dates for specific fixes. As a consequence, the fixes were rolled out as part of regular Telegram updates.

И мне нравится этот пассаж:

“Don’t roll your own crypto” is a common mantra issued when a cryptographic vulnerability is found in some protocol. Indeed, Telegram has been the recipient of unsolicited advice of this nature. The problem with this mantra is, of course, that it sounds like little more than gatekeeping. Clearly, some people need to roll “their own crypto” for cryptography to be rolled at all.

Сам пейпер (Four Attacks and a Proof for Telegram) не читал, но было бы любопытно.

16 июля

Три совета

Это контент из спонтанного треда в твиттере, где я отвечал на вопрос (спасибо @arturpaikin за напоминание). В идеале я бы хотел превратить это в более длинные посты, но вероятность того, что это случится в ближайшее время мала, поэтому публикую так.

Какие лайфхаки, идеи или навыки резко улучшили качество вашей жизни?
@gucol_lu

  1. Любить себя не потому, что «заслужил», а а по умолчанию
  2. Всяческие ADHD-тактики (официальный диагноз я не получал, но)
  3. Воспитывание вкуса

Если хочешь, могу развернуть:)

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

Колесо вкусов от good coffee box

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

Глубина темы благотворно влияет на мышление, мне кажется, и учит прислушиваться к себе :)

ADHD-тактик море, из того, что вспоминаю навскидку:

  • если проще сразу сделать, чем записать, — надо сделать сразу;
  • у меня время бывает двух видов: сейчас и «не сейчас», поэтому нужны календари для взаимодействия с людьми, у которых не так;
  • отключать ненужные нотификации
  • использовать гиперфокус, когда он подворачивается под руку :)
  • и наоборот, прерывать себя, если он пошёл не туда;
  • кофе!
  • достаточно отвлекающая музыка, чтобы загрузить часть мозга, которая любит переключаться на другое
  • ещё многие пишут, что стимулянты работают, но тут ничего не скажу;
  • сигареты (никотин)
  • записывать, что я делал, когда отхожу от ноута (восстанавливать контекст дорого)

Про любовь к себе: конечно, сложно! Ещё учусь, но без этого ещё сложнее

Это и принятие-ситуации-как-есть, и отмечать, когда в голове говорит перфекционизм (он не рационален)

Из любопытного ещё: найти «свой» вид упражнений, который будет по фану, а не для чего-то ещё.

Я пришёл к тому, что я по умолчанию достаточно хорош.

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

Ещё вдогонку:

  • история, которую мы рассказываем о себе, дико влияет, но ее можно редактировать
  • тело подаёт сигналы, но мне оч легко их пропустить, и я сознательно выращиваю чувствительность к себе (на банальном уровне: голоден ли я? Удобно ли я сижу?)

11 июля

Heist Devlog #1

I was glad to find My First Game Jam and entered it, only to immediately be sidetracked by all the other stuff in life.

The initial plan was to prototype a small puzzle game, idea of which was brooding for some time in my mind. I called it Heist.

Heist is based around planning the heist (i.e., algorithm for each crew member) and then watching your team execute the plan (or not).

The trick is that during the execution of the plan you can’t change it, you have to plan ahead.

Another point is that main metaphor is not a map, but timeline of actions.

Ideas for Levels

I had two ideas for levels which should be pretty easy to figure out.

Smallest possible level

There are no guards, only the diamond for you to pick and move out.

Solution:

  1. Move(Diamond)
  2. Grab(Diamond)
  3. Move(Exit)

Two-person job

Heist movies are all about crew, which assumes that the job would require multiple roles.

This is two-person level, where one is distracting the guard, while the other is picking the diamond. Diamond can’t be picked if it’s being watched by guard.

Solution:

  1. a. Distract(Guard)
  2. b. Search(Diamond)
  3. a. Distract(Guard) cont.
  4. b. Grab(Diamond)
  5. a. Move(Exit)
  6. b. Move(Exit)

Reality

As I mentioned above, life got in the way, and I found myself at Saturday evening with no game to submit. Additional hurdle was that I didn’t learn bevy engine enough to be able to churn out prototype with drag-n-drop as I wanted.

Given that there is a lot of UI (only execution stage is not-UI), I decided to write the prototype in Svelte, a web framework.

That still wasn’t a walk in the park, and I submitted my archive with only a hour to spare (of two week game jam, that is).

Turns out that SvelteKit requires you to be able to specify an absolute root path (e.g., /heist) during the build, while itch.io hosting places your files to some unpredictable directory on CDN. And so I was forced to abandon SvelteKit and hastily setup a rollup build, battling the cryptic errors one by one (it was not as bad as it sounds, as I did not use any Kit-specific logic anyway).

It certainly would be less stressful if I tried deploying to itch.io beforehand :)

You can checkout this prototype at https://marinintim.itch.io/heist (only works on desktop due to drag-n-drop).

The planning stage

Final thoughts

While the prototype is certainly unpolished, I was able to verify for myself that the mechanic of assembling a plan is entertaining, and I plan on slowly exploring the mechanic further after the jam (e.g. signals between crew members, dependencies between actors, field-of-vision, and so on).

I am glad that this time I submitted something. I exercised my vim-fu, re-learned browser's Drag-n-Drop API, and learned a few things about myself during the process.

All in all, it was fun, and I'll try to participate in more game jams in the future :)

8 июля

Про алгоритмическую ленту

Я перенёс контент из треда в Твиттере

Алгоритмическая лента… где ты контролируешь алгоритм.

В целом, чем умнее сервер, тем пассивнее клиент.
И интересы сервера могут не совпадать с интересами клиента.

В этом смысле наши браузеры пассивны — они показывают то, что предложил сервер. Редкое исключение: люди ставят адблокеры.

Точно так же пассивны «брендированные» приложения: они приучены работать с одним определённым API.
И заточены под улучшение Метрик.

Иногда люди скатываются в обвинение конкретных людей: дизайнеры инстаграма хотят, чтобы мы сидели 24/7 с айфоном в руке.
Я думаю, что подобные вещи возникают из системы как таковой, а не из злого умысла. Дизайнеры приходят на работу и им нужно работать, а для этого нужны метрики.

А метрики «хорошо сделанная работа» нет, есть MAU, engagement time, клики по рекламе, и прочая ерунда.

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

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

Напомню, что в первом браузере (WWW на NeXT) была возможность редактировать страницы, которую не стали включать в консольный браузер и в Mosaic.

При этом сложно представить Браузер 2.0 в Апсторе — такое приложение вряд ли сможет пройти ревью, ведь оно делает всё и сразу.

Поэтому доступный вариант «прототипа», который можно собрать руками сейчас, это Браузер 2.0, реализованный на технологиях Браузера 1.0

Иными словами, пользователю нужен свой умный сервер.

И когда у человека есть сервер, то человек превращается из пользователя в гражданина Сети, у него появляется agency.

Ну вы поняли, тред внезапно снова скатился к Индивебу: https://marinintim.com/2019/indieweb/

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

Из банальных идей, которые понемногу (спустя столько лет!) проникают в текущие браузеры: деление вкладок на группы, по разным контекстам. Это контейнеры в FF и tab groups в Safari на iOS 15.

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

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

Людям нравится гипертекст: они переизобретают его как https://roamresearch.com, https://obsidian.md, чуваки, употребляющие слово zettelkasten, люди, собирающие «тред с тредами», и так далее.

Опять же, гипертекст не равен тому, как устроен Веб сейчас. Я отчасти рад, что люди перестали использовать слово гипертекст и теперь можно начать компанию по его реклеймингу. Жду, что то же самое произойдёт с REST и (неудачно названным) HATEOAS.

7 июля

·

Отличный writeup про уязвимость в менеджере паролей Касперского.

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

Это означает, что если два человека генерировали пароль одной длины/алфавита в одну и ту же секунду, то пароль получался одинаковым. И это означает, что если примерно известно время создания пароля, то можно… просто посчитать пароли плюс-минус от этого времени, в сутках всего 86400 секунд.

Пользователи не замечали, что если быстро нажать «сгенерировать ещё», то получится тот же пароль, из-за длинной анимации создания пароля.

Менеджеры паролей, как и многое связанное с криптографией и безопасностью, кажутся обманчиво простыми. Я думаю, что известное выражение don’t roll your own crypto во многом про это — легко сделать что-то не так. Даже нормальные building blocks могут привести к плохим результатам, если их невнимательно соединить.

5 июля

·

Возможно, вы уже слышали, но Audacity (опенсорсный редактор аудио, популярный среди подкастеров и не только) недавно перешёл в руки Muse Group, компании, выросшей, как я понимаю, из калининградского Ultimate-Guitar.

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

Также они получили права на 90% кода, попросив основных контрибьюторов подписать CLA и требуя подписания от новых контрибьюторов. Подробнее про CLA можно прочесть на LWN.

Сервисы, куда они хотели слать аналитику — Яндекс.Метрика и Гугл.Аналитика. В связи с этим появился новый Privacy Agreement, вызвавший ещё больший бомбёж (наши данные отправляются прямиком в Russia!), о чем я кратко писал в твиттере (или просто поискать по слову Audacity).

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

  • платить, деньгами или данными;
  • быть цифровым минималистом;
  • быть контрибьютором, частичным автором своих инструментов.

Или все три одновременно.

2 июля

·

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


Смерть ссылок, на мой взгляд, частично связана с тем, что у пользователей корпоративных сервисов нет контроля над URL — и поэтому о нем они и не заботятся.

URL служит как opaque token (и часто таковым является, когда в нем торчит UUID или unsigned integer), он не связан с содержанием, и никто не будет защищать его, когда движок сайта неизбежно поменяется.

В лучшем случае создатели сервиса зафигачат редирект (в худшем — перманентный редирект на /404.html, нет, я не плююсь кислотой).

Что делать? Если ссылаетесь на чужой контент и хочется избежать гниения, то отправьте ссылку в Интернет-архив или продублируйте у себя где-то. Публикуйте контент там, где контролируете урлы. Да, я чувствую иронию.

А, автор изначальной статьи пиарит perma.cc, но я не всматривался.

30 июня

·

Очень краткая история мессенджеров Гугла: https://www.theverge.com/2021/6/21/22538240/google-chat-allo-hangouts-talk-messaging-mess-timeline

Статья хорошо очерчивает хронологию, но не ставит диагнозов.

Может, в комментарии придут люди, которые лучше знают Гугл изнутри, но снаружи выглядит так, что менеджеры получают плюшки за запуск новых заметных инициатив, и новое приложение — заметная инициатива, и неважно, что уже есть пяток мессенджеров. Также неважно, что случится с сервисом через год, потому что плюшки уже получены.

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

26 июня

·

Решил поучаствовать в My First Game Jam Summer.

Это будет не первая попытка поучаствовать в геймджеме, если я правильно помню, но почему бы и нет :)

С учётом того, что я устроился на новую работу, и скалодром/бег, и прочие социальные обязательства, то двухнедельный вариант кажется «в самый раз», но всё равно нужно будет сокращать масштаб «игры».

24 июня

·

Погружаюсь снова в удивительный мир настройки сборки фронтенда. В этот раз узнал о существовании craco: create-react-app configuration override, который при помощи манипуляций с кэшом модулей подключает модифицированные версии конфигов.

К этому инструменту есть свои плагины, а у плагинов свои настройки, чтобы ты мог настраивать, пока ты настраиваешь.

То есть, я настраивал плагин, который менял поведение craco, который меняет конфиги react-scripts, где настраивается вебпак.

Поражает, конечно, что иногда это всё работает.

5 мая

Deep Work

Закончил слушать Deep Work Кала Ньюпорта. Раньше читал его So good they can’t ignore you, но не написал рецензии, поэтому не вспомню деталей. В этот раз попробую написать, чтобы запомнить зацепившие моменты лучше.

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

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

Довольно легко свалиться в поверхностную работу, ту, что не требует ни фокуса, ни вовлеченности: митинги, почта, кодревью. Но такая работа не приносит ни глубинного удовлетворения, ни развития ключевых навыков, ни несоразмерно большого количества value.

Самая страшная мысль книги: способность работать глубоко легко потерять, и очень сложно восстановить. Она страдает, когда часто переключаешься между контекстами.

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

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

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

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

Здесь же отдельно был пассаж о дешевизне онлайн-внимания, где вместо оценивания интересности или важности контента люди лайкают друг друга потому что они лайкают друг друга. С точки зрения автора, это может создать неоправданные ожидания относительно качества своего контента (его же полайкали столько раз!). Я же давно думаю, что люди лайкают друг друга в первую очередь, поэтому эту конкретную иллюзию испытываю в меньшей степени.

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

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

Перезагрузка и папка Downloads; Deep Work; webmention

Привет, это Тим Маринин и «Рассылочка». Вы когда-то давно на неё подписались на моём сайте; если что, всегда можно отписаться.

Перезагрузка

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

Взял всё да удалил. Было страшно, но не сильно: я скопировал важные проекты и все ssh-ключи на внешний диск, а если что-то всё-таки понадобится из удаленного, то есть бэкап жёсткого диска в облаке.

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

Что уже поставил обратно:

  • 1Password, мой менеджер паролей
  • iA Writer для написания текстов и Drafts для маленьких текстов
  • Sublime Text для редактирования кода
  • Tower, графический клиент для гита на попробовать
  • Discord
  • Инструменты для разработки: Xcode, Homebrew, Elixir, Node.js, Deno, Postgres.app
  • Tailscale — удобный VPN поверх Wireguard.

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

Ещё в сфере продуктивности я начал пробовать bullet journal, но об этом как-нибудь в другой раз 😅

Deep Work

Отчасти эта перезагрузка была вдохновлена чтением книги Deep Work Ньюпорта, на которую я написал рецензию.

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

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

webmention

Я опубликовал на crates.io и Гитхабе webmention: это консольный инструмент и библиотека на Расте для отправки и обработки вебменшенов (про них я писал в Индивеб-календаре). Дело в том, что отправить вебменшен довольно легко, если знать куда, — но для этого нужно найти нужный endpoint, который может таиться как в теге <link rel="webmention">, как на marinintim.com, так и в заголовке Link, и (тут я сам удивился) в обычном теге <a rel="webmention">.

Буду рад звёздочкам на Гитхабе! Сейчас UX утилиты спартанский, в духе старого Unix: если нет ошибок, то нет и вывода. Я хочу прикрутить какую-нибудь визуализацию прогресса отправки, но ещё не придумал, как она должна выглядеть.


В других новостях: перенёс эту рассылку на buttondown.email — тут можно писать в маркдауне!

Также скоро поеду на неделю лазить на скалы 🧗, и вероятнее всего буду оффлайн всё это время. Спасибо, что читаете!

Тим

30 апреля

·

Petition to replace all ping usage with 'boop'.

Here is how you can participate:

$ alias boop=ping
$ boop marinintim.com

2 апреля

·

На текущем проекте есть Настоящие DBA, и я несколько раз удивлялся SQL-запросам, которые они пишут. В частности, хочу записать две вещи, которых я не знал о SQL (и не буду использовать сам в будущем).

JOIN через запятую

SELECT thing_a, thing_b FROM table_a, table_b WHERE table_a.id = table_b.foreign_key_id.

Это join, условие которого написано в where. Это старый стиль, его ещё называют theta-style join.

В целом, считается устаревшим и менее очевидным (лично я привык к обычному JOIN table ON (table_a.field = table_b.field; забываю про существование JOIN table USING (field)).

Создал SQLFiddle с примером.

Ещё есть неплохой пост-сравнение.

ORDER BY 1 / GROUP BY 1, 2, 3

Числа ссылаются на порядок получившихся колонок.

На мой взгляд, это очень хрупкая ерунда — вдруг кто-то добавит ещё одно поле в запрос.

23 марта

22 марта

·

Просто тестовая заметка.

14 марта

Выгрузка данных из ВК

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

ВК не так давно добавил возможность выгрузить архив своих данных, его можно запросить на странице /data_protection. В моём случае архив готовился около суток.

К сожалению, архив оказался далеко не полным — в нём нет ни контактов друзей (только имя с ссылкой на профиль ВКонтакте), ни фотографий (вместо них тег img с src, указывающим на сервера ВК), ни файлов, загруженных в раздел «Документы». Аудиофайлов тоже нет — только названия композиций (но хотя бы плейлисты есть). В целом, это набор перелинованных между собой HTML-страниц в кодировке Windows-1251.

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

Сохраняем фотографии

При помощи такого скрипта можно вытащить ссылки на изображения.

find photos/photo-albums -iname '*.html' | xargs -I% perl -lne 'print "$1.jpg", "\t", $2 if /<a href="https:\/\/vk.com\/([^"]+)"><img src="([^"]+)"/' % >names_urls.txt

После этого при помощи wget можно скачать эти файлы по списку. Я уверен, что это можно сделать как-то изящнее (посоветуйте как!).

perl -lne '`wget -O "$1" "$2" &` if /([^\t]+)\t([^\n]+)$/' names_urls.txt

Сохраняем фотографии из сообщений

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

find messages -name '*.html' | xargs -I% perl -lne "print \$ARGV, \"\t\", \$1 if /<a class='attachment__link' href='([^']+)'>/" % >messages_attachments.txt

В эту выборку попадают все ссылки-аттачменты, поэтому я отдельно вытащил ссылки с userapi.com — похоже, что фотографии лежат там.

grep 'userapi.com' messages_attachments.txt >messages_attachments_userapi.txt

Опять-таки, явно можно сделать лучше, но эта ерунда раскладывает фотографии по соответствующим директориям беседы.

cat messages_attachments_userapi.txt | perl -MFile::Basename -alne 'my $localfile = dirname($F[0]) .  "/" . basename(split(/\?/, $F[1])); `wget -O "$localfile" "$F[1]"`'

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

Бонус-раунд: поиск по переписке

По идее, можно было бы просто искать по этим файлам, но они лежат в кодировке cp1251. iconv позволяет перекодировать в единственную нормальную кодировку (UTF-8), а ripgrep умеет запускать скрипт, прежде чем искать внутри файла.

Создал такой примитивный скрипт:

#!/bin/sh

iconv -f cp1251 $1

И можно примитивно искать:

rg --pre ./prescript.sh --pre-glob 'messages/*/*.html' -g 'messages/*/*.html' 'Тим из будущего'

Нашёл такое сообщение:

Ха, с этим будет разбираться Тим из будущего, аее

  • 18 ноября 2016 года

😢

26 января

30 ноября 2020

Inputs and Outputs, or How to Shape Your Worldview Before Someone Does It for You

Recently I was talking with Andrey Sitnik about media consumption and IndieWeb paraphernalia, and I stumbled upon a realisation.

A lot of people struggle with Read-it-later services, like Pocket, where the links just pile up, and they never get around to reading it, and then they feel bad.

As it goes, I spoke first and thought second, I said: if you stop and think for five minutes about it, you'll understand why this happens. Then I had to back it up and went on with a blissful feeling of puzzle pieces clicking together: one does not treat 'Pocket' as an input to a system of consuming information, only as an output, thus it is bound to overflow.

Now let me expand on these matters a little bit more.

Inputs are the ways by which information gets to you. If you check Twitter every morning, then your feed is an Input. If you do read email newsletters and not just archive it, that's an Input. Ditto for podcasts, books, Hacker News, Instagram, RSS, and plain old conversations.

The necessary condition of being an Input is that you do consume from it, preferably at regular intervals. Otherwise it may as well not exist for you. To read books you actually have to sit down and read a book.

On the other hand, Outputs are where you put information. If you post photos on Instagram, that's an Output. If you file links to "Read-it-later", that's an Output. Outputs are less complex, and I will discuss them in more detail in another article.

Now, if Pocket is not an Input in your system, then you won't have the chance to read the articles you put there: in the moment when your brain is thirsty for more information, you'll drink from the usual Inputs, not the Pocket. To "read it later" you actually have to sit down and read it at some point, otherwise it just won't happen.

Going further, a thing can be both an Input and an Output at the same time. Sometimes this configuration creates a feedback loop: you read on Twitter about current events, post some hot takes there, get sweet sweet likes, and repeat.

I suppose that a combination of Inputs/Outputs for a particular person is mostly stable over time, while the persona you present online is more flexible. Over time you converge on the set of websites you check regularly and themes that interest you, and if the perceived consensus in the community shifts, you either have to remove yourself from this community, or go with the flow.

Now, the trouble is that "persona you present online" influences the real you as well in subtle, almost imperceptible ways. As Vonnegut wrote, “We are what we pretend to be, so we must be careful about what we pretend to be.”

Going for lighthearted example, if you think that all of your twitter feed is hating on Kubernetes, and you do not have a strong opinion on whether it is good or bad yourself, then you will probably adopt a milder "K8s is at least somewhat bad" attitude, shifting the balance further.

You can also apply this in reverse: other people too can only read what's being made available and are influenced by this no less than you are, so if you want your perspective to be heard and may be even adhered to, then you have to publish it.

Algorithmic sorting, the kind that is used on Twitter, FB, Instagram, is not a perennial evil per se, it just rearranges the contents of a particular Input by predicting what will solicit a visceral reaction from you, forcing you to react (engage) even more. This is a quirk of these Inputs, so you should adjust your expectations and seek alternatives as well.

You can only read on Twitter what is twitable. You can't react to or learn from something that you don't know to exist.

Creating an information bubble is in a sense inevitable, because no one can read everything without some sort of filtering beforehand, so the question is which filters are being used and who set them up.

Shape your inputs consciously, for they in turn shape you.