RSS
Поиск
21.04.2023


🔜 Скоро! — @SadFavBot v0.4.1 Я не пытаюсь подстраиваться ни под какой график, но на удивление само собой получается релизить примерно по длительности стандартных спринтов, так как с прошлого релиза прошло около двух недель: чуть больше с 0.3.4 и чуть меньше с версии 0.4.0, раскатанной 9 апреля, в которую, впрочем, вошло только два критических исправления ошибок и полная переделка стартового диалога вместе с системой вывода справочных сообщений (которые печатаются при вызове команды /help), из-за чего я особо её и не афишировал. Она же положила начало и большой работе по написанию документации на двух языках (русском и английском), что позволило привести в порядок терминологию, которая вольно плавала как по коду, так и в текстовках, называя одни вещи разными именами и разные вещи одними именами. Этот же релиз на самом деле не привносит ничего нового с точки зрения пользователя (кроме исправления пары багов). Но он очень важен с точки развития проекта, так как закрывает огромный пласт накопившегося технического долга. Я наконец-то отделил взаимодействие с БД в слой отдельных сервисов, доработал логирование, перешёл на Go 1.20 и использование пула подключений к Постгресу, переименовал таблицы и поля в БД, которые со временем перестали соответствовать своему назначению и новой терминологии, пересмотрел некоторые интерфейсы, сделав код, надеюсь, более понятным и предсказуемым. Но во всём этом огромном рефакторинге таится и большая опасность: поскольку была переписана половина всей кодовой базы, то что-то могло сломаться и остаться незамеченным во время автоматизированного и ручного тестирования. Я надеюсь, что установка обновления пройдёт как по маслу, но не могу исключать и возникновения каких-либо неприятных проблем. Так что хочу предупредить о возможной недоступности бота при плановом обновлении, которое назначено на 22.04.2023 в 0:10. Ещё пару слов хотел сказать про взаимодействие с БД. Как оказалось, тут всё ещё нет идеального решения. ORMы я ненавижу просто в силу их сложности и непредсказуемости. Мне советовали использовать Squirrel для генерации запросов и sqlx для мапинга результата на структуры. От последнего пришлось сразу отказаться, так как он работает по стандартному интерфейсу database/sql, а я как раз хотел перейти на более удобное, быстрое и эффективное прямое использование pgx. С конструктором запросов я поигрался и не понял прикола: получается какая-то жуткая мешанина из гошного кода и строк на чистом SQL без каких-либо явных преимуществ, а вложенные запросы превращаются вообще в какой-то кошмар. В результате плюнул и оставил запросы как есть, просто обособив их в отдельные сервисы. Также я обновил и дополнил ряд своих паков. Можете доустановить новые мемы 😊
13.04.2023


Снова ору с авторов Go. Прочитал соглашения и правила рендеринга док-комментов. Они умудрились и тут решить, что самые умные, и отринуть все достижения цивилизации в виде бэктиков (`), решив считать все строки с отступами — кодом. Сами же признаются, что такое поведение оказалось контринтуитивно во многих случаях. Списков у них тоже нет, похоже, потому что их же собственные примеры рендерятся как блок кода. Когда у Вас случится очередной приступ синдрома самозванца, вспомните, что существуют такие признанные, известные и, уверен, хорошо оплачиваемые программисты, которые в начале прошлого десятилетия умудрились создать язык без дженериков, перечислений, множеств, бэктиков и списков в докстрингах, но с if err != nil
12.04.2023


12.04.2023


Нафиг айти, стану коубером! 😁 ░░░
12.04.2023


Эх, как же грустно, бессмысленно и неблагодарно быть перфекционистом. Пока другие фигачат десятками ботов без какого-либо описания и с README в 4 строки и получают тысячи пользователей, да ещё и с донатами, ты сидишь и три дня описываешь всю документацию на двух языках, один из которых не знаешь и ненавидишь, за то что именно он стал языком «белых» людей, а твой, которым ты владеешь пусть и не в идеале, но на достаточно хорошем литературном уровне, стал языком «черни». Надеюсь, хоть рекрутеры и собеседующие зайдут на Гитхаб, посмотрят и оценят мой труд в виде офигенного офера, чтобы старания были хоть как-то вознаграждены. А может быть я просто всю жизнь занимаюсь хернёй и нужно совершенно иначе расставлять приоритеты…
12.04.2023


Подписчики и подписчицы, вы просто космос! С Днём космонавтики! 💫👩‍🚀🚀
10.04.2023


Поигрался с новой нейрорисовалкой от Сбера — Кандинским 2.1. Довольно тяжело получить прям хороший результат, чтобы одни объекты плавно не перетекали в другие и не терялись детали. Но благодаря возможности стирать и перерисовывать отдельные части изображения по уточняющим запросам, что-то более-менее приемлемое всё-таки можно получить
10.04.2023


Channel photo updated
07.04.2023


В качестве пятничного поста хотел бы порекомендовать кое-что вкусненькое. На мой взгляд, самый вкусный напиток в "Теремке", который я всегда покупал там по несколько бутылок, потому что не знал, где ещё его можно купить. Но оказалось, что всё-таки можно, и гораздо дешевле! Правда оптом. Но точно быстро выпьется! Питень "Мёд и Специи" Лимонад от Медоварус, 6 бут.*1,0л https://ozon.ru/t/Ew4q4ly Пост не рекламный, просто реально вкусная штука, которой хочется поделиться
06.04.2023


На самом деле есть ещё одна картинка, но она чуть-чуть не дотягивает до двух недель, так как я не сразу вспомнил включить в @BotFather, чтобы Тг отправлял сообщения о выбранных вариантах в inline-выдаче. Если used_inline_handler_GetFavoritesInlineHandler показывает, сколько всего было обращений к боту через inline-режим, за исключением результатов, закешированных Телеграмом, то inline_result_was_chosen показывает, сколько сообщений было отправлено от имени бота в конечном итоге
06.04.2023


Ну и давайте поделюсь статистикой за эти две недели. Общее количество закладок в БД: 625 штук на 213 алиасов!
06.04.2023


@SadFavBot — обновление до v0.3.4 Итак, спустя две недели, одну из которых я честно отдыхал, пора выкатывать следующее обновление, так как я наконец-то дописал реализацию ссылок. Но первым делом хотел бы поблагодарить всех, кто дал мне обратную связь. Спасибо вам! Огромное! Про какие-то технические проблемы никто не репортил, но были конструктивные жалобы и предложения по улучшению процесса первоначального знакомства с предназначением и интерфейсом бота. Текстовки я и так собирался менять, так как в процессе разработки они были написаны больше в духе косноязычных плейсхолдеров, да ещё и с кривой разъехавшейся терминологией. Но вот сценарий для начального диалога… Спасибо! Но это обновление ещё про технические фичи, а документация будет правиться уже в технорелизе 0.4. Итак, сейчас я исправил пару минорных багов: — доработал установку пакетов, чтобы отображалось не количество фраз, а выводился полный список; — уменьшил время кеширования ответов с пяти минут до одной, так как типичный сценарий использования оказался: посмотрел, что нет какого-то объекта для фразы X, добавил его, а в запросе он всё равно не выводится — упс! Для полного решения нужно, конечно, совсем отключать кэш на стороне Телеграм, но пока выбрал компромиссный вариант. Но, разумеется, это не всё. В данном релизе реализованы две последние фичи, касающиеся поиска и создания закладок, которые я изначально планировал: ссылки и поиск по подстроке. Начну издалека. На мой взгляд, первоначальная задумка искать по точному совпадению хоть и лучше, чем вываливать гору информации и пытаться угадать, что хотел пользователь, по части информации, которую он ввёл, но всё же не идеальна. Возьмём для примера мем "а чё так можно было". Создать закладку с полным названием было бы самым логичным решением, но всё же при поиске хотелось бы получать результат и по более короткому варианту, например — "так можно". И тут есть три варианта: 1) создать ещё одну закладку с таким же объектом — нормальный вариант, но плохо работает, когда под одним именем хранится несколько объектов; 2) создать ссылку на готовую закладку, чтобы при поиске по фразе-ссылке искались результаты от исходной строки; 3) искать не по точному совпадению, а по введённой подстроке — есть риск, что выдача превратится в помойку и вообще не факт, что там будет нужный результат (inline-результат может содержать максимум 50 объектов, но сейчас при наличии большего количества результатов запрос вообще упадёт и не вернёт ничего). Кажется, что второй вариант идеален и не имеет НО. Но в качестве экспериментального варианта я реализовал и третий. Он отключён по умолчанию, но включить можно с помощью команды /mode. А простейший вариант создать ссылку: /link так можно -> а чё так можно было Надеюсь, эти фичи будут вам так же полезны, как и мне! Всё так же жду фидбэка и любых баг репортов.
04.04.2023


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


А давайте, кстати, поделюсь простейшим скриптом для бэкапов, который хранит месяц дампов: # Dump the database docker exec -t db-container pg_dumpall -c -U db-user | gzip > /home/backup/db_$(date +"%Y-%m-%d_%H_%M_%S").gz # Delete old backups find /home/backup/ -type f -mtime +30 -name '*.gz' -delete # Sync with a bucket rclone sync /home/backup/ remote-s3:bucket-name Нужен ещё конфиг для rclone, создать ключ и бакет в S3 и добавить запуск скрипта по расписанию в crontab — всё!
31.03.2023


Поздравляю всех айтишников с Международным днём резервного копирования, который отмечается сегодня! Это действительно важная часть нашей работы, про которую нередко забывают и всегда потом жалеют. Так что предлагаю всем сегодня проверить, все ли важные для вас данные лежат в нескольких надёжных хранилищах и задуматься над исправлением ситуации, если это не так. Я же в честь праздника настроил автоматическое снятие дампов с базы данных @SadFavBot и их загрузку в облачное хранилище не только на другом сервере, но и у другого провайдера, и вообще в другой стране. Так что теперь точно можете не волноваться, что вот вы сохраняете мемы, сохраняете, а они возьмут и внезапно пропадут: вероятность такого сценария сильно уменьшилась
29.03.2023


Пожалуй, лучшее объяснение монады, которое я слышал
24.03.2023


Мимо борюсь уже 6 лет с переменным успехом
24.03.2023


23.03.2023