Портрет 4X_Pro
Был в Сети 15 дек. 2024 г., 00:24
Мультиблог
4X_Pro
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb, slow lifer.

Социальные сети


Новости сайта в Telegram

t.me/4x_pro

Лог жизни

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


Ещё два противоречия

4X_Pro
Осознал ещё два противоречия в своём мировоззрении.
Первое заключается в вопросе конкуренции. Я всегда считал её злом, которое лишает спокойствия и уверенности в будущем, а также ведёт к напрасной трате ресурсов (например, на яркую упаковку и рекламу для того, чтобы убедить покупателя выбрать именно ваш товар). С другой стороны, недавно подумалось: если бы я жил в условиях идеального социализма, где полностью запрещена конкуренция, а задачи для желающих поработать на благо общества распределяются централизованно, у меня не было бы возможности писать свой форумный движок! Вместо этого я получал бы задачи на доделку какого-нибудь условного phpBB или, ещё того хуже, Wordpress, именно для того, чтобы не создавать конкуренции. А если бы хотел что-то в них изменить существенно, пришлось бы убеждать в этом основателей проекта. В общем, вынужден признать, конкуренция — не есть зло само по себе. Более точным было бы утверждать, что злом является вынужденное участие в тех или иных её видах.
Второе противоречие — то, что с одной стороны, я мечтаю о мире, где каждый сможет быть собой. С другой — о наличии неких всеобщих стандартов «каким быть», общественной системы ценностей, в которой, в частности, осуждалось бы стремление к богатству, но поощрялась бы тяга к знаниям. А фраза в духе «если ты такой умный, почему такой бедный» делала бы сказавшего её нерукопожатным. Впрочем, это противоречие можно снять, если сделать в качестве идеологии «соответствуй своему типу личности и оценивай окружающих по их соответствию своему». И тогда путь высокие Воли и Физики из Гаммы бьются за богатство и/или достижения, а альфийцы с высокой Эмоцией — ищут возможность жить по настроению. Главное, чтобы друг друга оценивали с поправкой на типы личности.

Начал работу над фотогалереей для IntB

4X_Pro
Никак не могу определиться, как же быть с OwnYourGram: то ли переделывать его так, чтобы были вызовы через API вместо парсинга, то ли просто сделать свой аналогичный сервис, никак с OYG не связанный, то ли искать способы сделать так, чтобы Instagram парсинг не блокировал. Поэтому в воскресенье решил взяться за другое — за модуль фотогалереи для сайта, сделать который хотел очень-очень давно, но всё откладывал. Там тоже всё идёт очень медленно и тяжело, как говорится, со скрипом. Хотя по серверной части уже почти всё готово, осталась, в основном, вёрстка и действие по выводу всех фотографий на одной странице.

Снова тягостные дни

4X_Pro
Опять какие-то тягостные дни в последнее время, кроме разве что понедельника. Чем бы ни занимался, всё идёт очень тяжело и медленно. Любое действие занимает раза в два больше времени, чем ожидалось изначально. Хотя вроде биоритмического минимума нет, или же «молодость года» делает его менее заметным, чем осенью. Хочется послать всё подальше, отключить Интернет и сидеть и целыми днями играть в старые игры, читать книги и сайт TrueCrime.

Дни изучения людей с противоположным мировоззрением

4X_Pro
Вчера и сегодня у меня как-то сами собой случились дни изучения людей с противоположным мировоззрением. Вчера хотел часа в 3 выключить компьютер, но наткнулся на Дзене на блог некоего Офисного Крыса. Он — типичнейший «ускоритель жизни» с базовой ЧЛ, первой Волей и очень материалистическо-приземлённым мировоззрением. Но при этом он сидит на четвертом уровне по Подводному, и то ли четвертом, то ли пятом РСИ.Из-за этого не одержим идеей достигательства, как те, кто на третьем, а пишет весьма адекватные и толковые вещи по вопросам, связанным с работой и кадрами. В общем, с интересом читал почти до 6 утра. Только один момент вызвал бурное неприятие: где он советовал при ведении блога на Дзене изучить потребности целевой аудитории. На мой взгляд, писать нужно о том, о чём есть потребность высказаться, а не о том, на что спрос есть! Даже отметился там комментарием по этому поводу. Но всё же один вопрос не даёт мне покоя: неужели этим людям самим нравится быть такими приземлёнными материалистами, сосредоточенными на зарабатывании денег? Это же ужасно…
Днём просматривал рассылки ЖЖ и наткнулся на заметку про childfree. Долго читал комментарии, удивляясь, сколько же в Сети ненавистников childfree. Казалось бы, чем мы им мешаем? Некий aziopik даже дальше пошёл: написал, что вот если убрать систему пенсий и социальных пособий, то childfree сразу исчезнет как явление. На это я ему ответил, что совершенно нет, если грамотно инвестировать, то можно получить доход, который позволит прекрасно обходиться и без пенсии, и без детей. На что он выдал просто шедевральную фразу «С чего бы вдруг политики оставили этот источник в вашем распоряжении, а не забрали себе?». На это я просто не нашёлся что ответить. Сначала хотел было расписать возможные сценарии такого «забрали себе» с разбором, почему такой сценарий маловероятен, но потом задолбался формулировать и бросил.
Ещё попытался было закончить реализацию протокола Micropub. Но застрял на двух моментах. Во-первых, надо придумать, как выдавать статус 201 вместо 303, который делается при создании темы обычным образом, не слишком «костыльно». В какой-то момент хотел сделать выдачу 201 всегда, но оказалось, что при этом статусе редирект не делается. Во-вторых, выяснилось, что PHP по умолчанию не получает заголовок Authorization, который необходим для проверки OAuth-токена. И только совсем вечером нашёл решение, что с этим делать. Но больше сделать ничего не удалось, видимо, время ещё не пришло.

Два дисгармоничных дня

4X_Pro
Вчерашний день начался просто замечательно. Я собрался и быстро сделал то, о чём писал недавно — возможность авторизации в IndieAuth по URL подразделов для пользователя-владельца. Затем решил вопрос с OwnYourGram: установил его на хостинг, где стоят мои старые сайты. Там можно выбирать любую версию Процесс шёл тяжело и мучительно. Оказалось, что хотя на хостинге пишется, что у меня 5 сайтов из 7, реально можно создать только пять, как раньше. То есть хостер обновил тариф, но у старых пользователей автоматически ничего не поменялось. Написал в техподдержку, они ответили, что нужно сменить тариф в панели управления на такой же. После этого заработало, но на ожидание ответа потерялся почти час.
Я уже предвкушал, как объявлю о том, что сделал траснляцию из Instagram в личный блог. Но тут неприятности посыпались дальше. Началось всё с того, что OwnYourGram не находил ссылку на мой сайт для трансляции. Стал разбираться, в чём дело, и обнаружил, что от Instagram вообще ничего не приходит. После недолгой отладки выяснил, что OwnYourGram использует сервис XRay берёт данные напрямую со страницы Instagram, а не через API. Но публичную копию XRay Instagram давно заблокировал, поэтому ничего не работало. Попытался было запустить копию у себя. Но то же самое: ошибка 429 — превышено количество запросов. Хотя на ноутбуке XRay отрабатывает нормально и данные возвращает.
В общем, провозился с этим всю вторую половину дня. И под вечер ощутимо стал нервничать на тему «опять ничего не успеваю», так как над душой висит ещё пара задач по freelance, делать которые категорически не хочется, да ещё в последние дни в мессенджерах стали писать больше, прямо хоть снова закрывай всё.
Поздним вечером хотел было сделать то, что обещал corsico, и даже начал, но скоро понял, что в таком состоянии ничего хорошего не выйдет. Плюс получилось как всегда: небольшое изменение на давно не обновлявшейся системе (всего-то php-curl поставить надо) тянет за собой необходимость кучи обновлений (в частности, система хочет обновить php до 7.3), которые создают риск, что всё поломается, поскольку скрипты тоже довольно старые… В итоге часа полтора провозились, но ничего вообще не сделали, кроме того, что я послал corsico ссылку, как делать HTTP POST без curl. И отложили всё на сегодня, но сегодня я тоже в не особо работоспособном состоянии, и по-хорошему, нужно всё на четверг-пятницу сдвинуть.
Ночью спал плохо. Несколько раз просыпался без видимых причин. И в итоге встал с существенным недосыпом и весь день подтормаживаю. Попытался было играть в WoT, но это был один из самых ужасных игровых дней за последнее время, вплоть до того, что плохо соображал, куда вообще еду. Потом устроил себе отдых в тёмной комнате, немного пришёл в себя, но за остаток дня ничего толком не сделал.
Есть мысль переделать OwnYourGram так, чтобы он делал вызовы через новую API вместо парсинга страниц, и вроде как это даже не так уж сложно (благо весь код взаимодействия собран в одном месте), но что-то в голове пока не складывается.

Хаотичная активность и большая прогулка

4X_Pro
В последние дни какая-то хаотичная активность. Хотя вроде нашёл решения проблем с IndieWeb, как-то нет внутреннего ресурса начать их реализовывать. Вместо этого берусь за какие-то совершенно сторонние дела: то парсер для выдачи Яндекса начал писать, то решил попробовать сделать биграммный анализатор для соционического типирования, то начал писать заметку о выживании в Интернете для своего первого Дзен канала. Причём в каждом из этих направлений делаю шаг, упираюсь в какую-то проблему и бросаю.
Например, парсер для Яндекса с первого же запроса получает CAPTCHA. Видимо, нужно сначала сделать запрос главной страницы, получить скрытые поля формы, а потом уже обращаться к серверу.
Биграммный анализатор я сделал (использовав для этого NLTK), но, наученный прежними экспериментами, сначала решил проверить на устойчивость результатов на разных текстах одного автора. На своих результаты оказались довольно стабильны, а вот когда взял стихи Tellы и сравнил с её же сообщениями ВК, разброс оказался огромный. И теперь не уверен, стоит ли продолжать эксперименты. К тому же, наверное, нужно не «в лоб» сопоставлять результаты, а считать сначала разницу со среднестатистическим распределением биграмм в русском языке. Но вот где их взять?
В написании заметки сформулировал пять главных принципов, и продумал, как их раскрыть, но увяз на вводной части.
Ещё попытался было поднять собственную копию OwnYourGram на VDS, где стоит socionics.me, но и тут ждала неудача. Когда стал подтягивать зависимости через composer, тот ругнулся, что им требуется PHP 7.1. А чтобы поставить 7.1, нужно либо всю систему обновлять, либо ставить PHP из стороннего репозитория (что мне ну очень не нравится).
Пожалуй, единственное, что довёл до конца за эти три дня — это добавил в SiteKnockerBot удаление из списка мониторинга сайтов, если пользователь заблокировал бота. Хотел написать об этом заметку в компьютерный блог, но так и не собрался…
Зато сегодня выбрался на прогулку к Первому Декоративному (aka Собачьему) и Ольнянному прудам. Изначально думал, что она займёт не так уж много времени, но в итоге прогулял два часа. Понял, что Первый Декоративный пруд недооценивал: считал его неинтересным, но там достаточно классно. И это, наверное, самый безлюдный пруд в парке. Посидел там некоторое время на скамейке, понаблюдал за чайками, которые его облюбовали, и парой уток.

IndieWeb — решения найдены!

4X_Pro
Вчера нашёл решение тех проблем с IndieWeb, о которых писал в прежних сообщениях.
Во-первых, решил вопрос, что делать с endpoints в подразделах, которые не видны на главной. Решение оказалось очень простым: добавить поддержку авторизации не только с адресом главной страницы, но и с адресом подраздела, если авторизуемый пользователь прописан как его владелец. То есть я смогу заходить, используя не только адрес 4xpro.ru, как сейчас, но и 4xpro.ru/lytdybr/, 4xpro.ru/news/ и тому подобное. Правда, в этом случае для каждого раздела на сторонних сервисах придётся делать настройки отдельно, но на то это и мультиблог с независимыми разделами. Ну и придётся переделывать уже сделанный код авторизации, что тоже не особо радует.
Во-вторых, понял, как всё же решить вопрос с репостингом в социальные сети. Всё же не встраивать его в IntB, а сделать на поддомене аналог Bridgy, но с поддержкой ЖЖ и ВКонтакте, который будет выполнять репост в каждый из сервисов по приходу Webmention. А дальше для каждого раздела сделать возможность в настройках задавать список предлагаемых Webmentions, для которых будут выводиться галочки при отправке сообщения. Таким образом, репостинг будет полностью управляемым (что для меня важно), и общее решение полностью соответствует духу IndieWeb.
И даже с Facebook придумал решение, правда, довольно кривое. В Facebook можно отправлять соообщения через RSS с помощью dlvr.it. И тогда получается такая схема: я делаю Webmention с сайта на сервис, тот сохраняет его в RSS, и скармливает его dlvr.it, который репостит на Facebook.
Кстати, попробовал было найти какой-нибудь бесплатный сервис, аналогичный dlvr.it, но ориентированный на Рунет, но так и не нашёл. Уже не первый раз с удивлением обнаруживаю, что сейчас найти что-то бесплатное (пусть и с существенными ограничениями, но для частного некоммерческого проекта их обычно достаточно) в англоязычном Интернете проще! Кроме уже упоминавшегося dlvr.it, в своё время так находил как минимум бесплатную базу PostgreSQL. Воистину, мы оказались в мире наизнанку!

Две прогулки в Кусково

4X_Pro
Вчера выбрались с Tellой в Кусково. Я очень хотел поймать момент, когда активно тает снег, и все ручьи и канавы заполнены водой. И, надо сказать, это удалось. Увы, не учёл только одного: в парке, особенно у пруда, значительно холоднее, чем в городе, поэтому быстро замёрз. А Tella устала, поэтому прогулка получилась достаточно короткой: мы прошли вдоль пруда, потом по аллее вдоль канала. На какой-то момент хотели выйти к Сухому пруду, но передумали и ненадолго углубились в лес. Немного посидели на скамейке (и я вспомнил, как в 2007—2008 годах сидели там с Миком и строили огромные планы по работе с бессознательным) и ушли на берёзовую аллею, начинающуюся недалеко от самого дальнего залива, хотели дойти до дубов. Но увы, там было слишком грязно, и поэтому повернули назад. Прошли по дальнему берегу пруда и решили возвращаться. В целом впечатления от прогулки остались весьма позитивными, а вот фото я почти не делал: небо было всё же мрачноватое. Вместо этого снял несколько видео ручьёв и выложил в Instagram, и пару раз сфотографировал Tellу, причём из одной из фотографий она сделала себе новый аватар.
За остаток дня толком ничего не сделал, кроме мелкой доделки SiteKnockerBot для одного из давних пользователей. А ночью впервые за последнее время случился приступ бессонницы. Не мог уснуть до 6 утра примерно. Утром проснулся, и в голове сложилась картина, что же делать с теми проблемами IndieWeb, в которых писал в предыдущих сообщениях. А потом, выглянув на улицу, я принял совершенно неожиданное для себя решение: отправиться в Кусково второй день подряд! Только вот собирался долго, из дома вышел только около 16 часов. И на этот раз отправился в Кусково пешком. Но позже выяснилось, что это и к лучшему.
Увы, вынословость у меня стала хуже, и когда дошёл до Дворцового пруда, уже ощутимо устал. Стал было искать скамейку, чтобы сесть и отдохнуть, но это оказалось не так-то просто: сегодня в Кусково было гораздо многолюднее. Пришлось обойти полпруда, прежде чем скамейка нашлась. Пока сидел и отдыхал, вспомнил одну свою старую идею — жизнь в режиме свободного скитания по городу, так, чтобы домой приходить только поспать. Возникла эта идея в 2012 году, когда у меня появился смартфон, и я ушёл с работы. И понял, насколько я переоцнивал свои силы тогда: всё-таки делиться впечатлениями на ходу с телефона — это совершенно не моё. Чтобы написать хоть сколько-то развёрнутую заметку, мне нужен компьютер, покой и замкнутое пространство. Кстати, думаю, ещё бы и просто весь день находиться в людных местах мне было бы тяжело.
Отдохнув, я снова вышел к тому месту, где перед впадением в пруд сливается несколько ручьёв. Правильно я сделал, что выбрался вчера: сегодня воды в них было уже ощутимо меньше. Зато на ручье кто-то установил игрушечное водяное колесо, которое даже вращалось! Потом снова отправился на ту аллею, о которой уже упоминал. На этот раз всё же дошёл до поляны со старыми дубами и сделал несколько фотографий. Но дальше идти не решился, вернулся немного назад и свернул на более-менее сухую тропинку, по которой вышел на дорогу, которая пересекает Собчачий ручей. Осмотрел его, сделал несколько фотографий лесных луж, которые там просто огромны. И понял, что правильно сделал, что вышел так поздно: когда солнце клонится к закату, можно сделать куда более интересные фотографии отражений, чем просто в дневное время. Перед уходом решил всё же дойти до Сухого пруда. Оказалось, что весной он не такой уж и сухой — на дне скапливается вода, затапливает выросшие там деревья и кусты, среди которых прячется множество уток. А ещё осмотрел ещё один ручей.
В общем, очень доволен и той, и другой прогулками! Правда, во второй по-настоящему интересной была только вторая часть (ручьи, аллея и далее). А ещё и там, и там было то, чего мне часто не хватает: ощущение того, что спешить некуда и незачем, всё идёт как надо, включенность в здесь и сейчас.
Ещё во время второй прогулки устроил проверку приложения-шагомера. Писал маршрут Геотрекером, и потом сравнил показания. Расходились они существенно: по Геотрекеру получилось почти 8 км, а приложение-шагомер насчитало чуть меньше 7 км. Только вот непонятно, в чём ошибка: в размере шага или в подсчёте их количества. Приложение считает, что при моих параметрах шаг должен составлять 74 см. Но если взять, и поделить правильное расстояние на число шагов, которое приложение насчитало, то получается, что шаг составляет 87 см.

Дальнейшие размышления о моём пути в IndieWeb

4X_Pro
В конце прошлой недели испытал ещё одно небольшое разочарование в IndieWeb: сервис OwnYourGram пишет, что Instagram блокирует обращения с него, поэтому добавление новых пользователей прекращено. Впрочем, его исходный код есть в свободном доступе, и можно будет поднять собственный экземпляр. Но опять могут быть сложности с тем, что у меня Micropub endpoint будет видна только в подразделе «Лог жизни», куда и нужно транслировать записи из Instagram.
Но, поразмыслив в пятницу и субботу, пришёл к выводу, что на самом деле не всё так плохо. В общем-то, изначально планы у меня были не такие уж большие: делать репосты новостей в Twitter, статей из блога — в VK и Facebook (и, выборочно, тоже можно в Twitter), импорт сообщений из Instagram в раздел «Лог жизни» и экспорт этого же раздела в ЖЖ (и, возможно, в другие блоги типа Privet.Ru). Но всё, кроме Facebookа, можно сделать своими силами: для работы с Instagram API модуль у меня уже есть, с VK API тоже знаком, в Twitter, хоть там и сложно получить аккаунт разработчика, можно всё же слать через Bridgy. Правда, с Twitterом что-то непонятное: почему-то и через Bridgy, и через Dlvr.It режутся внешние ссылки. С ЖЖ тоже вопрос решён, только довольно криво. Ну а на Facebook — попробовать использовать всё тот же dlvr.it.
Вопрос только в том, как лучше сделать — встраивать всё это в IntB или вынести в отдельный сервис, аналогичный Brid.Gy, но с поправкой на особенности IntB, в частности, расположение endpoints в подразделах…

Прошёл Heroine's Quest

4X_Pro
Сегодня прошёл игру Heroine's Quest за rogue (воровку/барда). Чувствую с одной стороны, мощный эмоциональный подъём, с другой — небольшую грусть по поводу того, что игра закончена. Эх, такая красивая история и такой замечательный игровой мир, выдержанный в лучших традициях Quest for Glory — одной из самых значимых для меня игр. Впрочем, потом ещё пройду за воительницу и волшебницу, там немало отличий, да и дополнительные квесты разгадал далеко не все. Так что буду возвращаться ещё не раз, но первое прохождение — это первое прохождение!

Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.