Анекдот про рекурсию
Когда воспользовался хинтом от IDE на апгрейд функции (PHP 7 - PHP 8) и положил сервер на 4 часа из-за OOM
Апдейт коснулся разных частей системы, htop красный, кеш увеличили, кол-во процессов уменьшили, все равно php-fpm тупит, php демоны не отзываются и падают с непредсказуемой периодичностью
Tears in rain
Перечитал комменты, под своей последней (простите но у меня аллергия на слово крайний), статьей на хабре и пришло на ум:
Я видел такое, что вам, людям, и не снилось.
PHP-код, состоящий чуть менее, чем полностью из магических методов.
Атакующие корабли, пылающие над Орионом.
Костыли в FlatASMe, удерживающие систему на честном слове.
Лучи Си, разрезающие мрак у ворот Тангейзера.
Java-классы, унаследованные от 17 абстракций.
И if err != nil, вызвавший холивар среди гоферов.
Все эти мгновения затеряются во времени, как… слёзы в дожде…
Пришло время gc.collect().
Говнокодер
Ну вы это, мелодию сами подкините)))
Будто бы на опиойдах
я ебашил бириксойдом ойойой
Не фронтендер и не повар
А ебучий говнокодер ойойой
Было время я ебашил
просто так за хлеб и кашу ойойой
Сто скриптов добавил в кроне
навалил говна в шаблоне ойойой
Опенкарт битрикс или вордпресс
Наговнять на любой ЦМС
Только доступы ты мне давай
Всё готово - иди проверяй
Говнокод говнокод говнокод
я художник, а не идиот
Я так вижу работу свою
Пойду правки в продакшн солью
Я не знаю как в европе
может быть там тоже жоппа ойойой
Там друпалы и магенты
На фреймворках есть проекты ойойой
Кода строк у них поменьше
Может в них говна поменьше ойойой
Но я скажу вам за подход
там изначально говнокод ойойой
На фреймворке или на цмс
На реакте или на вью джи эс
По хуЮ мне на чем сделан сайт
Ведь везде можно накостылять
Говнокод говнокод говнокод
я художник, а не идиот
Я так вижу работу свою
Пойду правки в продакшн солью
Заезжают и модЫксы
Сайтов много там говнистых ойойой
Плагины все от народа
сто процентов говнокода ойойой
И какой-то черт бывалый
обосрет все материалы ойойой
Сниппеты в код навставляет
А что делать сам не знает ойойой
Даже если на МодЭксе сайт
Его можно легко обговнять
Много способов для этого есть
Но пора знать бы нам всем и честь
Говнокод говнокод говнокод
я художник, а не идиот
Я так вижу работу свою
Пойду правки в продакшн солью
Стих мой - тег моё. За ошибки прошу прощения, я синий как изолента.
UPD: Тег Мат почему-то не выбрался. Простите
Отправка логов в Telegram. Модуль для Laravel
Всем привет! В данной записи я хотел бы поделиться с вами модулем который я разработал для Laravel.
Это мой первый опыт в разработке публичных модулей для Laravel, поэтому прошу не судить строго!
Данный модуль позволяет легко и быстро настроить отправку логов и сообщений об ошибках в Telegram сообщество, где под каждый тип события вы можете выбрать отдельный топик. Таким образом вы можете отправлять сообщения о кастомных событиях, исключения и системные ошибки.
Конечно, есть более продвинутые решения для логирования, но они требуют более глубокую настройку. Я же хотел создать модуль, который будет быстро настраиваться и хорошо подойдёт для мелких и средних проектов.
Настройка модуля
Для начала вам нужно создать Telegram бота который будет отвечать за отправку оповещений. После этого создаём группу, включаем в ней «Темы» и добавляем созданного бота в группу (обязательно с правами администратора).
О создание бота вы можете почитать тут - https://prog-time.ru/course/bot-v-telegram-2/
Для получения ID сообщества вам необходимо добавить бота @myidbotв группу и отправить команду /getgroupid в чат.
После создания бота, записываем токен бота и id группы в .env файл.
TG_LOGGER_TOKEN="token_bot"
TG_LOGGER_CHAT_ID="id_group"
Устанавливаем модуль через Composer.
composer require prog-time/tg-logger
После установки модуля, вам необходимо создать конфигурационный файл config/tg-logger.php и прописать в нём параметры для работы модуля.
Вы можете создать файл вручную или перенести заготовленную версию конфигурации, которая находится внутри модуля, прописал следующую команду.
php artisan vendor:publish --tag=config
После настройки tg-logger.php, вам необходимо запустить команду которая создаст темы в группе.
php artisan tglogger:create-topics
*После запуска данной команды, файл tg-logger.php будет перезаписан и в нём будут указаны id тем
На этом настройка модуля закончена, ниже рассмотрим как работать с модулем TgLogger.
Работа с модулем TgLogger
Отлов системных ошибок
Для отлова всех типов ошибок вам необходимо изменить базовый обработчик логов в конфигурационном файле config/logging.php, указав в качестве обработчиков классы модуля.
'channels' => [
...
'telegram' => [
'driver' => 'monolog',
'handler' => ProgTime\TgLogger\TgHandler::class,
'formatter' => ProgTime\TgLogger\TgFormatter::class,
'level' => 'debug',
],
...
],
И в .env изменить параметр LOG_CHANNEL
LOG_CHANNEL=telegram
Отправка сообщений через класс TgLogger
Вы также можете отправлять оповещения, напрямую, используя класс TgLogger и статический метод sendLog().
TgLogger::sendLog('Your message', 'level');
Большое спасибо тем кто дочитать данную статью до конца! Буду очень рад если вы поддержите данное решение на GitHub и напишете свой комментарий под данным постом.
Итоги года- недопрограмммиста, что можно натворить с помощью доброго слова и ДипСика с ЛеЧатом для Wildberries (репрайсер)
Год с небольшим назад начал торговать кое-каким товаром на Wildberries, а поставщик требовал удерживать РРЦ- очень очень. Иначе штрафы и другие проблемы. Поэтому начал искать, сначала один программист, сделал сыроватый продукт, потом другой сделал как надо.. В итоге, стал сам пользоваться, и другим продавцам у нашего продавца тоже предоставил такую возможность.
В итоге, спустя полгода доработок- в неспешном тормозном стиле ( мне вообще-то 48 лет, и последний раз программировал в институте на турбо-паскале и бейсике в школе), получилось то что получилось, ниже это просто своего рода памятки. Рекламные статьи будут совсем на других ресурсах.
А тут пост для мотивации, что можно натворить не будучи программистом ( вру вру, в душе то я программист, мысленно программировал, писал тех.задания программистам, но кроме include в php ничего не знаю, при том что по логике пытаюсь код читать, который писал нейросети, они ведь иногда ошибаются, что-то иногда понимаю..)
Так что думаю совсем с нуля такое не получится написать, надо хотя бы немного уметь читать документацию и задавать чёткие запросы нейросетям, тем не менее, как говорится, не верю своим глазам!
Если бы учился программированию на php, думаю пришлось бы года два на это убить и то не факт, поскольку нет у меня необходимой для программирования усидчивости, и основные то интересы в жизни это психология (по последнему образованию клинический психолог), кое-какие сайты делал для продажи тех же товаров ( но опять же, без программирования, на конструкторе), написал книгу в конце июля вообще на абсолютно другие темы, не связанные никак с техническим программированием, больше на тему психологии, но тоже не совсем, сейчас планирую вторую книгу, и третья это книга стихов. Чтобы вы понимали, что я не очень то фанат компьютеров:-)
Но видимо была детская мечта стать программистом, в своё время не хватило баллов для поступления на автоматизацию металлургических процессов в Красноярске ( цветмет), и поступил просто на металлурга.. Это к тому, что некоторое вдохновение имеется, к тому же меня немножко подпинывали и давали идеи, что можно сделать ( сам то как человек ленивый наверное ограничился бы обычным репрайсером, как он был изначально написан супер-программистом)
Итак, что мы имеем в сухом остатке:
Было изначально:
Репрайсер, удерживающий РРЦ (рекомендованную розничную цену), с проверкой раз в 7 минут ( задается в настройках планировщика хостинг-панели), хранение данных в файловой бд sqlite. Контроль СПП и WB кошелька. ( первоначальные затраты 50 000 р, оплата программистам, первый создал неудачный костыльный вариант ( блин комом), второй создал очень хорошую основу с удачной архитектурой для обновления и для обучения на примере)
Также репрайсер изначально содержит возможность телеграм уведомления при ошибках обновления цен ( в основном это говорит о том, что на WB неполадки того или иного рода)
Что было далее сделано мной с помощью DeepSeek и Le Chat, вначале использовался Copilot, но быстро отправился в утиль..:
В самом репрайсере:
1) Изменение цен в заданных диапазонах времени ( свой прайс- под каждый диапазон времени)
2) Таблица репрайсера показывает остатки товара ( можно выгрузить в CSV, или Excel, с остальными параметрами, чтобы отфильтровать по заданным диапазонам)
3) Загрузка цен до СПП ( изначально репрайсер создан для удержания РРЦ)
4) Загрузка цен до WB кошелька.
5) Юнит-калькулятор ( расчет прибыльности и маржи в %, выгрузка в виде Excel-отчета, быстрая проверка рекламных расходов)
6) Полуавтоматическое обновление цен поставщика при условии заданного артикула поставщика в первой колонке Excel прайса.
7) Реализация создания отчета для отправки поставщику, при выполнении условия из п.6
8) Установка в прайсе товаров, которые не нужно менять
9) Горячая замена цен ( клик мышкой, открывается окно, вписывается цена). В основном цены задавались только напрямую через excel прайс, и приходилось каждый раз загружать новый прайс с измененной ценой.
10) Быстрый вывод товаров с нулевым СПП.
11) Вывод логов действий репрайсера за последние два дня- в модальном окне, либо скачивание файлов отчетов ( до этого только я мог сам посмотреть по FTP)
12) Выводится дата годности токена на видном месте ( ранее информации не было).
Внешние доработки, для себя, не используются другими клиентами, но можем сделать и вам😊
1) Выдача пропусков по расписанию ( актуально для FBS)
2) Синхронизация цен с OZON ( можно ставить в WB такие же цены как в Ozon, при условии доступа к api ozon, либо к сторонним json выгрузкам с прайсом в Ozon.
3) Слежение за конкурентами и создание таблиц с отчетами, проверка цены раз в час, выгружаются таблицы за последние 10 дней, а также в режиме реального времени,с уведомлением о нарушении в телеграм.
4) Слежение за конкурентами и следование ценовым стратегиям ( держать цену на 1р ниже, или такую же как у конкурента, но не ниже заданного предела). В процессе тестирования, проверялось на малом количестве товаров, планируется интеграция в репрайсер
5) Суммирование возвратов ( упрощение процесса работы с возвратами), актуально если очень много товаров.
Для удобства работы с клиентами
1) Обновитель-updater ( эдакая замена GIT по простому), на основе WinSCP ( да, голь на выдумки хитра, и до сих пор не научился пользоваться git, контроль версий проводится кустарно ( в этой папке старое, в этой новое, тестирую, смотрю). При нажатии одной кнопки происходит обновление на разных ftp-серверах, в разных папках, всех установленных репрайсеров, когда была сделана доработка.
2) Панель для контроля оплат, интегрирована с платёжной системой Prodamus через API ( автоматическое продление подписок), в целом реализована система автоматического выключения при неоплате, но пока достаточно всё видно и по таблице оплат.
3) Инсталлятор, то есть клиент вводит в заданной форме емайл, телефон, название организации, логин и пароль, репрайсер устанавливается автоматически по заданному адресу, настройки выдаются на экране установщика и отправляются на почту. Ранее всё делалось вручную, пароли задавались также, файлы копировались через FTP вручную.
Roadmap. Что будет сделано ( в процессе, или в планах):
Для себя: Уведомление об остатках ( если товара мало- приходит уведомление на почту и в телеграм), уже работает, но с колебаниями, в процессе доработки
Для клиентов: Whatsapp-уведомление для желающих ( выбор в настройках), если WB-кошелек сменился ( ранее работало автоматическое обновление WB-кошелька, сейчас задаётся вручную, ввиду изменений WB, возможно это обновление и не понадобится. если WB вернет доступ к настройкам). Также будет сделано уведомление о времени завершения работы токена ( за неделю).
Для клиентов: Задание диапазона обновления/проверки цен в админ/панели, от 7 до 60 минут ( сейчас в основном задаю вручную 1 раз в 7 минут, 1 раз в 10-15 минут, кому этого достаточно и не нужно очень быстро). Отключение/Включение обновления через админ/панель.
Для клиентов: Возможное добавление юнит-калькулятора для учёта % возвратов ( актуально для одежды, где много возвратов, и существующий юнит-калькулятор показывает тогда далеко не точные цифры). Также в общем будет сделана доработка юнит-калькулятора для удобства использования ( цветовые диапазоны для разных уровней прибыльности), сейчас выводится красным если ниже 0, а также другие доработки для горячего анализа прибыльности, сейчас таблица с параметрами добавляется через Excel.
Возможно создание PWA приложения, но это если хватит знаний и если так можно по архитектуре проекта ( до конца не проверено), в этом случае будет возможен запуск на любом мобильном с ярлыка, по аналогии с приложением в телефоне. ( пока это на последнем месте по приоритету)
Возможны другие доработки в меру сил, по пожеланиям клиентов.
Доработки с пометкой для себя чаще всего не внедряются в репрайсер, чтобы его не загромождать ( да и не всем клиентам это нужно), внедряются в первую очередь полезные доработки.
Ежели будут любые вопросы спрашивайте, авось отвечу:-)
Несколько скринов, для наглядности














