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

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


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

t.me/4x_pro

Лог жизни

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


Польза от Welltory и шаг вперёд в написании движка

4X_Pro
Проспал на удивление долго. Днём долго ничего не хотелось делать. Вместо этого пошёл в Instagram. Там DarLik прислала ссылку на аккаунт Tinkoff Journal, где задали провокационный вопрос «чем бы вы занимались, если бы была возможность не работать». Отписал штук шесть комментариев тем, кто считал, что без работы жить нельзя, и нужно не мечтать, а делом заниматься. А ещё в рассылке ЖЖ наткнулся на сообщение, где затрагивалась сходная тема, и тоже отметился. Правда, ответил только один упёртый дельтийский дедок.
Потом запустил Welltory, сделал очередной замер состояния. Результаты были так себе: 60-44-54%. Решил, что заставлять себя в таком состоянии смысла нет, и сел играть в Transport Tycoon. Где-то через час или полтора замерил своё состояние ещё раз, и на этот раз показатели были гораздо лучше: 80-58-46%. В общем, впервые от Welltory проявилась практически видимая польза!
После этого вновь занялся движком нового сообщества, и, надо сказать, весьма продуктивно. Почти доделал регистрацию и авторизацию пользователей. По сути, теперь осталось сделать только создание/редактирование статей, а также поиск, и будет готова основа для тестирования (то, что называют MVP — minimal viable product). Правда, пока что без дизайна от слова вообще.
Вообще, удивляюсь, насколько легко идёт написание кода! Такого даже в 2004 году не было, когда я Intellect Board 2.x писал. Там дело шло хоть и быстро, но с некоторым насилием над собой. А тут всё само собой получается. Видимо, то, что я делаю, правильно и угодно высшим силам!
Впрочем, один затык всё же был. Полтора часа провозился с тем, чтобы понять, почему не работает оператор $ne при выборке из MongoDB для проверки уникальности Email. Оказывается, я писал в условии ['login'=>['$ne',$login]], а нужно — ['login'=>['$ne'=>$login]]. А потом ещё вычитал, что в PHP 5.5 и выше для паролей нужно использовать не привычный SHA-256, а медленные хеши и специальные функции password_hash и password_verify. И какое-то время ушло на переделку.
И пока никак не могу определиться, как быть с управлением областью видимости для каждой заметки. Есть два решения. Первый способ — это хранить только обычные теги и признаки режима показа сообщения: в публичном пространстве (при выборке по тегу), на стене и в ленте событий, показываемой подписчикам. Тогда для выборок придётся делать довольно сложные запросы.
Второе — в список тегов кроме обычного #тег1, #тег2 добавлять скрытые теги вида @автор и #тег1@автор, #тег2@автор. Это создаёт избыточность (все теги дублируются дважды, а также дублируется автор, логин которого хранится в отдельном поле) и некоторое неудобство при редактировании (нужно отфильтровывать скрытые теги при выводе). Зато позволяет очень легко реализовать выборку по спискам подписки/игнора, где могут быть указаны как теги, так и пользователи и сочетания тег@пользователь. И ещё управлять легко областью видимости: если пользователь выберет показывать сообщение только в публичном пространстве, то скрытые теги просто не добавлять, если наоборот, только у себя в ленте, то оставить только скрытые теги.

Очень длинная велопрогулка вдоль Плотни

4X_Pro
После долгого сидения дома выбрался на велопрогулку. Решил съездить к озеру Бумеранг, на берегах которого я уже был в 2019 году совместно с сэром Миком. Тогда у меня возникло желание узнать, куда ведёт дорожка, которая уходит за озеро. Но то, что сэр Мик был пешком, а я — на велике, мешало проведению исследовательской экспедиции, поэтому отложил это на будущее. И вот этот день настал! Изначально я хотел выехать ещё около полудня, но и встал позже, чем хотел, и собраться быстро не получилось. Из дома я выехал только в 14:35.
До озера добрался без особых проблем. Только на начальном этапе мешал сильный ветер навстречу. По карте нашёл обходной путь, который позволил меньше ехать вдоль шумного шоссе. Сделал несколько фото, посидел на берегу, понаблюдал за стрекозами. Радовался свободе и возможности отложить все ненужные на самом деле дела и вот так вот взять и уехать. Ещё размышлял о том, как защитить тот новый формат сообществ, который я придумал (эх, никак не приходит в голову название!) от возможности накруток. В итоге пришёл к мысли, что за лайки начинающих пользователей не надо начислять авторам очки действий, то же касается и голосований за снятие тегов. Ещё пришла в голову мысль, что нужно дать пользователям возможность не участвовать в рейтинге активистов (некоторые 2В, думаю, оценят).
Потом глянул на мобильник и обнаружил, что он показывает, что за 38 минут я проехал 0 метров. Открыл приложение, и оказалось, что я при отъезде забыл включить GPS. В итоге часть прогулки от дома до озера оказалась потерянной. Обидно!
Посидев ещё немного, я решил двигаться дальше — изучать места за озером. Дорога там ну очень грязная даже несмотря на отсутствие дождей. То и дело приходилось слезать с велосипеда и вести его. Зато лес красивый: ели и сосны. Причём если обычно еловые леса кажутся мрачными, то сегодня из-за яркого солнца даже ельник выглядел красиво и приветливо. Я попытался это сфотографировать, но увы, не смог передать полностью. Ещё хотел слезть с велосипеда и какое-то время просто посидеть, так как считаю, что красоту любого места можно полностью почувствовать только в статике, никуда не двигаясь. Но увы, так этого и не сделал.
Зато через некоторое время выбрался к Плотне в её среднем течении. Какое-то время колебался, куда ехать дальше — вверх или вниз по течению. Но вниз дорога была труднопроходимой, поэтому решил двигаться вверх. Через некоторое время доехал до места, где в Плотню впадает один из притоков. Там устроена плотина, но воды в Плотне сейчас так много, что река нашла себе обходной путь вокруг, затопив ивовые кусты и устроив небольшой водопад. Осмотрел всё это, попытался снять видео, но получилось так себе. Задумался, а не вернуться ли назад вдоль этого притока (карты показывали, что там можно выехать на нормальную дорогу). Но всё же поехал дальше вдоль Плотни.
Сначала ничего интересного не попадалось. У Плотни и её притоков русло спрямлено искусственно, дорога вдоль неё достаточно хорошая, не считая того, что попалось несколько поваленных деревьев. Только один раз зазевался и наскочил на яму так, что очень ощутимо тряхнуло и руль чуть свернулся на бок. Потом увидел берёзу, растущую на самом берегу так, что она образовывала как бы арку над водой, но не сообразил сфотографировать. Проехал ещё один приток Плотни, и лес стал заканчиваться. На том берегу вообще началось поле, а на моём — сосны и ели сменились на берёзы.
Вскоре лес закончился и на моём берегу. Тут в Плотню впадал ещё один приток, а точнее даже, искусственный мелиорационный канал. Я опять задумался, не свернуть ли к асфальтовой дороге. Постоял, поразмышлял, сделал очень удачную фотографию этого берёзового леса, но всё же решил ехать дальше.
Поле встретило меня ощущением простора и удалённости от цивилизации. Впрочем, кое-что о ней всё же напоминало: опоры ЛЭП на другом берегу. Но увы, этот простор и пустота надоели мне достаточно быстро. Задавшись вопросом, сколько мне ещё так ехать, и вообще реально ли добраться до истока Плотни, я стал изучать карту. Оказалось, что её исток где-то в районе деревни Васютино (которая является локальным мемом — символом удалённости и глухомани). Поняв, что туда-то я может и доеду, но вот на возвращение выносливости точно не хватит, я отказался от идеи добраться до истока. Решил свернуть к озеру Светлому, возле которого был в прошлом году.
Само озеро производит двоякое впечатление. С одной стороны, оно очень красиво, спокойно и прозрачно. С другой стороны — это красота смерти: несколько лет назад в нём сильно повысился уровень воды, из-за чего погибло много берёз. И их стволы до сих пор торчат из воды, а к восточному берегу прибило много гниющих веток. А ещё на южном берегу озера — заброшенный детский лагерь, что тоже добавляет мрачности. С другой — кое-какая жизнь там всё же есть: видел утку с утятами и нескольких чаек. А ещё на берегу озера растут ландыши, увидеть которые в этом году я уже и не ждал. Попытался их сфотографировать, но несмотря на все усилия, на фотографии они получались ярко-белым пятном с размытыми краями. (Сейчас, сидя дома, понимаю, что нужно было сделать минус по EV, но тогда слишком устал, чтобы это сообразить.) Потом поснимал само озеро с западного и восточного берегов, и отправился домой.
Пока ехал по дороге и потом по шоссе, всё было более-менее нормально. Но вот последние несколько километров до СНТ дались мне очень тяжело. Хотелось пить (воды я, как всегда, с собой не взял — не рассчитывал на столь длинную поездку), сказывалась усталость, да ещё и седло у велосипеда разболталось и всё время отклоняется назад, из-за чего возрастает нагрузка на позвоночник. Приехав домой, обнаружил, что даже только та часть пути, которая записалась корректно, составляет 19 с лишним километров! А сама прогулка составила более трёх часов. Да и приложение Welltory показало опасный объём физической нагрузки. Тем не менее, поездкой я всё же доволен, даже несмотря на то, что остаток дня прошёл мимо. Только под вечер немного смог почитать сайт TrueCrime.

Халява МТС закончилась?

4X_Pro
Кажется, халявный Интернет от МТС всё-таки закончился. Во-первых, первого числа целых 2 Гб траффика потратилось на видео ВКонтакте, которое вроде бы должно быть безлимитным (или же то, которое я смотрел, было вставлено с какого-нибудь RuTube). Так что теперь у меня всего 500 Мб до 9 числа и придётся уйти в режим жёсткой экономии. Или даже вовсе устроить пару дней оффлайна. А во-вторых, и это гораздо хуже, видимо, закончилась та акция, по которой я получал Интернет бесплатно. По крайней мере, из списка бесплатных услуг исчезла информация о скидках, а цена тарифа с нуля стала 545 рублей. В общем, нужно дождаться 9-ого числа, посмотреть, что будет, и, возможно, менять тариф на тот, где абонентской платы нет.

Welltory как альтернатива биоритмам

4X_Pro
Вчера узнал от Tellы о приложении под названием Welltory. Оно измеряет такой параметр как вариабельность сердечного ритма, и на основе его оценивает состояние организма: уровни энергии, продуктивности и стресса. Измеряет необычным образом: палец кладётся на камеру телефона и вспышку, и приложение измеряет цвет изображения на камере. Количество проходящего сквозь палец света от вспышки зависит от того, сколько крови идёт через палец в данный момент, и дальше это обрабатывается нейросетью. Эх, впечатляет, что кто-то придумал такое необычное использование возможностей смартфона. А ещё это приложение умеет собирать данные, которые могут повлиять на самочувствие, из других источников: о тренировках из Google Fit, о погоде (для выявления метеозависимостей) и так далее.
На мой взгляд, хорошая альтернатива биоритмам, которые получалось определить только «на глазок», так как приложениям по их расчёту я перестал доверять, после того, как прочёл книгу Уинфри «Время по биологическим часам». Теперь можно изучать своё состояние вполне научно обоснованным образом, и браться за дела с поправкой на него. И если верить приложению, уровень энергии у меня не поднимается выше 65%, а большую часть времени вообще колеблется около 50%. Так что реально живу наполовину мощности… А вот производительность доходит до 79%.

Непримечательный день

4X_Pro
Странное дело: о сегодняшнем дне как-то писать нечего. Вроде и успел немало, в частности, разобрался с аggregated queries в MongoDB и понял, как делать запрос для выборки зависимых тегов, и на короткую прогулку по посёлку сходил, но всё равно писать не о чем. Пожалуй, самый запомнившийся момент — это проигрыш в шахматы, когда глупо зевнул ферзя. После чего сразу же сдался, хотя до этого имел все шансы выиграть. А ещё весь день мёрзну, хотя в комнатах вроде вполне приемлемая температура — 17—18 °C. В общем, день медленного и скрытого движения вперёд.

Вынужденный день отдыха

4X_Pro
Несколько дней занимался тем, что писал движок для нового формата сообщества, о котором упоминал в предыдущих записях (никак не могу придумать название). До воскресенья дело шло хорошо. Сделал мини-framework и вывод списка контента по тегу. Потом как-то застопорилось. Отчасти из-за нехватки знаний по MongoDB, отчасти — из-за моей вечной проблемы — если есть неопределённость, что делать в первую очередь, не сделаю в итоге ничего. Зато написал план того, как в таком сообществе должны начисляться/списываться очки активности и доделал задачу по freelance
Ещё снова похолодало, и холод загнал меня на второй этаж. Поэтому сегодня получился день отдыха: сидел за старым ноутбуком и играл в Heroes II, ещё пожарил шашлык. Впрочем, всё же нашёл кое-какие ответы на возникшие вопросы по MongoDB.
А ещё сегодня был какой-то просто день повышенной травматичности. Четыре раза попадал себе в руку шампуром, а потом чуть было не порезался ножом. Но вроде обошлось.

Вторая большая закупка завершена

4X_Pro
Ещё вчера закончил вторую большую закупку на бирже, которую начал ещё в феврале, — закончились свободные деньги. Хотя ещё остаётся возможность продать FXWO, но я это рассматриваю как резерв на тот случай, если вдруг что-то резко подешевеет и нужно будет хватать.
А закончилось всё так: я не выдержал, и откупил обратно по текущей цене акции Алроса, которые когда-то давно продал по цене 85 руб. в надежде, что упадут и потом куплю обратно дешевле. Увы, надежды не оправдались. Точнее, был короткий момент, когда действительно падали, но я его упустил, ожидая, что просядут ещё больше. Но пройти мимо дивиденда в 8.4% даже при текущей цене я не мог. В общем, ещё раз убедился, что нужно придерживаться стратегии «купил и держи», а не пытаться трейдерствовать. В конце концов, моя конечная цель — это всё-таки дивиденды.
Так что теперь меньше времени буду уделять рынку. Вместо напряжённого ожидания «а вдруг снижение и пора ловить момент» буду только изредка заглядывать, чтобы посмотреть, что там произошло за это время.

Связь Таро и Четверицы

4X_Pro
Вчера очень порадовала Tella. Она придумала связать масти Таро с элементами Четверицы Хайдеггера, что позволяет делать расклады на проявление миссии и опор личности. Интереса ради сделали на неё и меня. У меня одной из опор оказалась 8-ка Мечей. Сначала это удивило, но потом выяснил, что одно из толкований этой карты — несвобода. И тогда всё стало на свои места: для меня действительно запреты и ограничения вполне могут служить опорами личности (равно как и тот факт, что я им соответствую), а вот избыток свободы дезориентирует и вызывает растерянность. Впрочем, то же самое объясняется моим типом по типологии «Кроме людей» — Мышь.

Начал работу над новым движком

4X_Pro
26-ое число было очень непростым днём. Лунное затмение + сильная магнитная буря. Впрочем, перенёс я всё это достаточно легко, только в тот день был какой-то нервный, дёрганый и хаотичный. Перечитал кучу материала, но без толку. А вот вечером 25-ого реально болела голова и ни на чём не мог сосредоточиться. Из-за этого даже отложил freelance-задачу одну. Хотя, может быть, такая хаотичная активность и была связана с тем, что не хотел за неё браться.
Когда буря закончилась, и в голове восстановилась ясность, я решил, что не стоит выпендриваться с текстовыми файлами, и лучше сделать движок для сообщества, о котором я уже писал, на noSQL-базе MongoBD. Она просто идеально подходит для задач такого рода. В итоге весь вчерашний день прозанимался движком, и в общих чертах набросал мини-framework, на основе которого всё это будет работать. В отличие от монолитного IntB, где весь общий функционал собран в гигантском файле app.php, разбил его на несколько мелких классов, а также стал активно использовать exceptions и autoloader. Это реально облегчает разработку! Плюс понял преимущества camelCase в именах методов: не нужно всё время тянуться мизинцем до клавиши прочерка, да ещё с одновременным нажаитем Shift. Набор идёт быстрее, меньше опечаток и раздражения по этому поводу. И нашёл красивое решение, как обойтись без шаблонизаторов, но при этом автоматически экранировать HTML в выводимых данных. Позже напишу про него заметку в раздел «компьютерное»… Но самое главное, снова чувствую себя настоящим разрабочтиком, творцом! Давно такого не было!
Впрочем, немало вопросов ещё остаётся. Например, как быть с тем, что большинство тегов будет писаться по-русски: допустить ли кириллицу в URL (что я всегда считал дурным стилем) или же как-то приделывать транслитерацию. То же касается и имён пользователей…

Непростые размышления

4X_Pro
Последние несколько дней горю идеей создать то самое тег-управляемое сообщество. Вчера продумал, как это реализовать технически, и даже пришёл к выводу, что можно всё сделать только на файлах, даже без REDISа. Правда, чтобы избежать проблем с перезаписью файлов из-за одновременных обращений, придётся сделать отдельный процесс для операций, затрагивающих многопользовательские списки, и повесить его либо на cron, либо запускать как отдельный systemd-unit. Ещё непонятно, что лучше использовать для внутренней системы перекрёстных ссылок (например, в каталоге с тегами — на файлы с текстами, лежащие в каталогах пользователей) — symlinks или обычные txt-файлы с указанием пути и прочей мета-информации. Symlinks на первый взгляд, кажутся хорошим решением, но снижают легкость переноса сайта и делают невозможным размещение его на Windows-хостингах.
Ещё перечитал массу самой разнообразной информации по темам, которые могут пригодиться, так что теперь голова идёт кругом. Пересмотрел кучу WYSIWYG-редакторов, пытаясь найти бесплатный и с файл-менеджером. Искал готовые CMS на файлах, в надежде, что можно будет их использовать для моих целей без существенной переделки. В частности, посмотрел Grav и HTMLy. Но первый у меня просто отказался работать, потребовав PHP 7.3, а вторая — это, по сути, файловый аналог Wordpress. Если бы мне нужен был просто блог, то, может быть, была бы хорошим решением. Но когда я узнал, как там устроено хранение файлов, сразу понял, что работать будет очень неэффективно.
Потом пришла в голову мысль, что то, что я задумал, может быть слишком похоже на Reddit. Залез туда, поизучал, как там всё устроено, но нет. Местные subreddits — это всё же скорее аналог групп в соцсетях, а не тегов. Ещё выяснил, что движок Reddit — open source, думал даже, не приспособить ли его, но когда зашёл на GitHub и увидел, сколько там всего в репозитории, отказался от этой мысли.
Узнал ещё, что тот подход, который я когда-то назвал StaJAX — «главный контент генерируем в статику, второстепенную динамику подгружаем через AJAX» и кратко описал в одной из своих заметок — действительно постепенно становится одним из ключевых в Интернете. Правда, под другим названием: JAM-stack. Даже не знаю, радоваться, что удалось спрогнозировать будущее, или переживать, что При этом его ещё как-то умудряются совмещать с React, Angular и прочей подобной гадостью. Вычитал про такое интересное явление, как headless CMS, где на первом месте стоит создание API.
Также пришла мысль, что поскольку почти в любом социально-ориентированном проекте нужна система внутреннего обмена сообщениями, то нельзя ли интегрировать готовый децентрализованный мессенджер типа Matrix.net. Но пока ещё не нашёл ответа на этот вопрос.
Но вообще, хотя узнал много интересного, это повергло меня в уныние. Как жить при том, что моя скорость жизни столь несовместима с миром? Сейчас за 5—7 лет многие технологии морально устаревают, в то время как мне только чтобы решить, что технология имеет ценность, нужен год-полтора, потом несколько месяцев на первичное освоение, и пару лет — для того, чтобы пользоваться уверенно.
С подачи Tellы возникла даже идея создать оффлайновую комунну, где технологии будут искусственно заморожены на уровне 2007—2008 годов: никаких смартфонов (только кнопочные мобильники), интрасесть только с личными сайтам без фреймворков, только чистый JavaScript, HTML, CSS и PHP (или другой серверный язык) с очень ограниченным Интернетом, и т.д. Плюс из-за ограниченности числа людей каждый может получить свою долю общественного внимания и нет гигантского расслоения, когда у одного — миллионы подписчиков, а у другого — три посетителя в месяц. Но самое главное, чтобы в коммунну отбирались только люди с мышлением инженеров, а не маркетологов, то есть те, кто ставит перед собой цель решить какую-то задачу, а не менять цели на ходу в поисках того, что будет продаваться.

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

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