Как добавить динамически формиремую надпись на первой странице пдф файла с помощью пхп?
1. берем пхп, берем mpdf, импортируем пдф файл, формируем нужный хтмл, вставляем, рендерим - готово!
2. молодец, но: пользователь загрузил модный пдф файл версии 1.7, mpdf поддерживает версии до 1.4
3. ставим в контейнер ghostscript, через shell_exec перегоняем пдф в версию 1.4, дальше как прежде - готово!
4. молодец, но: пользователь загрузил пдф с каким-то странным изображением, которое пропадает при прогоне через mpdf
5. убираем импорт через mpdf, с помощью него просто в отдельный файл формируем пдф с отрендеренным хтмл,ставим в контейнер pdftk, а стоп он не поддерживается в alpine ставим в контейнер qpdf, через shell_exec накладываем файл с надписью на загруженный пдф (
6. молодец, но: пользователь загрузил пдф в котором сканы доков, поэтому формат пдф - А0 и вставленная надпись оказывается милипизерной, еще и не в том месте
7. забираем мета-данные загруженного пдф-файла через
8. молодец, но: а нет, пока все нормально, можешь выдохнуть
АААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААА
1. берем пхп, берем mpdf, импортируем пдф файл, формируем нужный хтмл, вставляем, рендерим - готово!
2. молодец, но: пользователь загрузил модный пдф файл версии 1.7, mpdf поддерживает версии до 1.4
3. ставим в контейнер ghostscript, через shell_exec перегоняем пдф в версию 1.4, дальше как прежде - готово!
4. молодец, но: пользователь загрузил пдф с каким-то странным изображением, которое пропадает при прогоне через mpdf
5. убираем импорт через mpdf, с помощью него просто в отдельный файл формируем пдф с отрендеренным хтмл,
qpdf --overlay)6. молодец, но: пользователь загрузил пдф в котором сканы доков, поэтому формат пдф - А0 и вставленная надпись оказывается милипизерной, еще и не в том месте
7. забираем мета-данные загруженного пдф-файла через
qpdf --json, находим размеры первой страницы, формируем надпись на формате А4 указывая в хтмл размеры в миллиметрах, через ghostscript меняем размер файла с сохранением всех пропорций до размера загруженного пдф, производим наложение - готово!8. молодец, но: а нет, пока все нормально, можешь выдохнуть
АААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААА
🤣2😢1
вот вроде бы в наше время все должно быть максимально просто
ты подключил себе интернет на 500 мбит, купил роутер, который такие скорости поддерживает
воткнул кабель в первый попавшийся порт (роутер же гигабитный, какая разница?) и пошел работу работать
а потом сидишь и думаешь - а кого хера такой интернет медленный? speedtest показывает жалкие 30 мбит/с
начинаешь разбираться, грешишь на ОС и железо, правишь конфиги и вроде становится лучше (аж 40 мбит), но все равно херня
а потом лезешь в настройки роутера, долго там лазаешь, проверяя все что можно и натыкаешься на веселое меню, которое тебе говорит, что порт, в который ты воткнул lan-кабель держитв всего лишь 100мбит
идешь перетыкаешь в соседний и вуаля! все начинает просто летать!
и даже в кс1.6 наконец-то пинг не 90, чудеса какие-то!
до заявленных 500 конечно не дотягивает, но в целом я доволен
ты подключил себе интернет на 500 мбит, купил роутер, который такие скорости поддерживает
воткнул кабель в первый попавшийся порт (роутер же гигабитный, какая разница?) и пошел работу работать
а потом сидишь и думаешь - а кого хера такой интернет медленный? speedtest показывает жалкие 30 мбит/с
начинаешь разбираться, грешишь на ОС и железо, правишь конфиги и вроде становится лучше (аж 40 мбит), но все равно херня
а потом лезешь в настройки роутера, долго там лазаешь, проверяя все что можно и натыкаешься на веселое меню, которое тебе говорит, что порт, в который ты воткнул lan-кабель держитв всего лишь 100мбит
идешь перетыкаешь в соседний и вуаля! все начинает просто летать!
и даже в кс1.6 наконец-то пинг не 90, чудеса какие-то!
до заявленных 500 конечно не дотягивает, но в целом я доволен
🔥1
ну что, новая неделя - новая работа?
2 недели назад написал заявление, сегодня вышел на новую
сфера интересная - электронно-торговая площадка; в 23м году уже работал на подобном проекте, было интересно; тут тоже скучно не будет - команда молодая, веселая, проект огромный (9 гигов репа весит)
по увольнению говорить особо не хочется - уходить было жалко, с командой сработались, задачи выполнялись влегкую, но я человек живой, к тому же с семьей, которую надо кормить, и с кредитами, которые надо платить
терпеть не могу, когда эйчары зажимают зарплаты текущим сотрудникам, а у самих на хх висят вакансии с вилкой от твоей зп
и был даже контроффер, но каждые полгода-год вот так вот воевать и с пеной у рта выбивать себе повышение я не готов - это нездоровая херня
постов по техничке пока вообще не ожидается, все было какое-то рутинное последнее время, а ближайшие пару месяцев будет просто онбординг
единственное что я щас пересел на винду 11; в целом ощущение, что поставил какой-то очень модный дистрибутив линукс; wsl2 радует очень сильно однако
ну и в гта4 можно поиграть без помощи рантайма стима)
2 недели назад написал заявление, сегодня вышел на новую
сфера интересная - электронно-торговая площадка; в 23м году уже работал на подобном проекте, было интересно; тут тоже скучно не будет - команда молодая, веселая, проект огромный (9 гигов репа весит)
по увольнению говорить особо не хочется - уходить было жалко, с командой сработались, задачи выполнялись влегкую, но я человек живой, к тому же с семьей, которую надо кормить, и с кредитами, которые надо платить
терпеть не могу, когда эйчары зажимают зарплаты текущим сотрудникам, а у самих на хх висят вакансии с вилкой от твоей зп
и был даже контроффер, но каждые полгода-год вот так вот воевать и с пеной у рта выбивать себе повышение я не готов - это нездоровая херня
постов по техничке пока вообще не ожидается, все было какое-то рутинное последнее время, а ближайшие пару месяцев будет просто онбординг
единственное что я щас пересел на винду 11; в целом ощущение, что поставил какой-то очень модный дистрибутив линукс; wsl2 радует очень сильно однако
ну и в гта4 можно поиграть без помощи рантайма стима)
👍5🔥3😁1
Фронт на дейлике выдал:
«Там можно поправить руками, но через жопу, поэтому сегодня весь день ковыряемся в жопе»
«Там можно поправить руками, но через жопу, поэтому сегодня весь день ковыряемся в жопе»
🤝3
так, эпопея бугурта про вставку подписи в pdf уже была
в этот раз у нас в меню "шаблонизация docx html'ом"
для справки: используется пакет PhpOffice\PhpWord
прикол в том, что с самого начала начинаются странности - чтобы импортнуть надо создать объект таблицы со строкой и ячейкой и вот уже только ячейку можно наталкивать хтмлом (скрин 1)
на этом вроде бы можно успокоиться, потому что оно в целом работает
но тебе пишут и говорят, что при добавлении отступов они в доке теряются, просто пропадают
я опущу все 5 часов моих страданий, но финальный алгоритм сводится к следующему (скрин 2):
1. оборачиваем пришедший хтмл в <body>
2. импортим через таблицу
3. обернутый хтмл толкаем в DOMDocument и вырезаем все элементы, которые из себя представляют просто символ новой строки
3. проходимся по каждому импортируемому элементу, сопоставляем с нодами в DOMDocument (это на самом деле просто, потому что порядковые индексы элементов совпадают)
4. ищем в нодах стиль вида /padding-(\w+): (\d+)px/
5. выставляем отступ элементу ворда, но не прямым импортом, неееееет; в ворде один таб это 708 попугаев; конвертируйте из пикселей сами)
6. на всякий случай, если не указан отступ, то выставляем насильно 0
7. импортим в шаблон документа
и все это только потому, что ворд не поддерживает хтмл-стиль padding)
скрины в комментах
в этот раз у нас в меню "шаблонизация docx html'ом"
для справки: используется пакет PhpOffice\PhpWord
прикол в том, что с самого начала начинаются странности - чтобы импортнуть надо создать объект таблицы со строкой и ячейкой и вот уже только ячейку можно наталкивать хтмлом (скрин 1)
на этом вроде бы можно успокоиться, потому что оно в целом работает
но тебе пишут и говорят, что при добавлении отступов они в доке теряются, просто пропадают
я опущу все 5 часов моих страданий, но финальный алгоритм сводится к следующему (скрин 2):
1. оборачиваем пришедший хтмл в <body>
2. импортим через таблицу
3. обернутый хтмл толкаем в DOMDocument и вырезаем все элементы, которые из себя представляют просто символ новой строки
3. проходимся по каждому импортируемому элементу, сопоставляем с нодами в DOMDocument (это на самом деле просто, потому что порядковые индексы элементов совпадают)
4. ищем в нодах стиль вида /padding-(\w+): (\d+)px/
5. выставляем отступ элементу ворда, но не прямым импортом, неееееет; в ворде один таб это 708 попугаев; конвертируйте из пикселей сами)
6. на всякий случай, если не указан отступ, то выставляем насильно 0
7. импортим в шаблон документа
и все это только потому, что ворд не поддерживает хтмл-стиль padding)
скрины в комментах
время подвести итоги
что ж, год наконец-то подходит к концу
последний рабочий день был уже вчера, а я до сих пор не могу отделаться от мысли, что надо щас сесть поработать и что завтра тоже на работу
много чего случилось в этом году:
1. трудоустройство; в феврале сократили, устроился в микрозаймы, в октябре для прикола устроился в своем городе на работу по совместительству (ничего толкового не вышло, но по факту за 4 часа работы заплатили 80к :D, уволился от скуки), в декабре из микрозаймов ушел на электронно-торговую площадку для закупок
2. под самый конец года успел избавиться от всех кредитов, потратив на это кучу времени и денег, зато теперь осталась только ипотека; ну, а при нынешних ставках закрывать свою раньше я не планирую
3. по сравнению с концом 23го года вырастил себе зарплату в 2 раза; доволен как слон, но из-за пункта 2 денег по-прежнему 0 :D
4. по документам стал "сеньером", на некоторое время даже лидом; такой себе опыт, понял, что менеджмент это не ко мне; щас сижу и радуюсь позиции обычного разраба)
5. канал вырос с 37 человек до 49; судя по сайту tgstat.ru, посты читает куда больше 49 человек; не знаю с чем это связано, потому что я нигде не даю рекламы и вообще особо не рассказываю никому про канал; возможно это я просто слишком часто проверяю как там посты поживают :D
6. успел поработать в съемном офисе, круто было, но дома все равно сильно лучше
это на самом деле небольшая часть всех событий, но честно говоря, я в этом году так задолбался, что уже больше не хочу ничего вспоминать; хочу просто отдыхать и набираться сил
всем в новом году желаю психического здоровья, любимой работы и побольше приятных моментов!
что ж, год наконец-то подходит к концу
последний рабочий день был уже вчера, а я до сих пор не могу отделаться от мысли, что надо щас сесть поработать и что завтра тоже на работу
много чего случилось в этом году:
1. трудоустройство; в феврале сократили, устроился в микрозаймы, в октябре для прикола устроился в своем городе на работу по совместительству (ничего толкового не вышло, но по факту за 4 часа работы заплатили 80к :D, уволился от скуки), в декабре из микрозаймов ушел на электронно-торговую площадку для закупок
2. под самый конец года успел избавиться от всех кредитов, потратив на это кучу времени и денег, зато теперь осталась только ипотека; ну, а при нынешних ставках закрывать свою раньше я не планирую
3. по сравнению с концом 23го года вырастил себе зарплату в 2 раза; доволен как слон, но из-за пункта 2 денег по-прежнему 0 :D
4. по документам стал "сеньером", на некоторое время даже лидом; такой себе опыт, понял, что менеджмент это не ко мне; щас сижу и радуюсь позиции обычного разраба)
5. канал вырос с 37 человек до 49; судя по сайту tgstat.ru, посты читает куда больше 49 человек; не знаю с чем это связано, потому что я нигде не даю рекламы и вообще особо не рассказываю никому про канал; возможно это я просто слишком часто проверяю как там посты поживают :D
6. успел поработать в съемном офисе, круто было, но дома все равно сильно лучше
это на самом деле небольшая часть всех событий, но честно говоря, я в этом году так задолбался, что уже больше не хочу ничего вспоминать; хочу просто отдыхать и набираться сил
всем в новом году желаю психического здоровья, любимой работы и побольше приятных моментов!
❤4🍾3🔥2
я привык видеть такую картину (несколько стейджей, отдельно билд, отдельно линтеры, деплой по кнопке и тд) на работах, где были отдельные админы/девопсы, которые настраивали пайплайны и деплой за разрабов, оставляя нам только написание самих шагов в стейджах
на подработке же такого никогда не было, я вообще там по факту один за всех и ci/cd там был соответствующий, на коленке "шоб работал тока" - по ссх тыкаемся на контур, пулим с гита, гоняем миграшки, гоняем тесты и любые другие проверки - все сразу на контуре
если у вас внутри что-то от этих слов умерло, то поздравляю - вы адекватный человек
однако в эти каникулы мне пришлось плотно засесть за эту тему и по сути с нуля переделать весь ci/cd; все в связи с тем, что на некоторые проекты придется отдать на техподдержку и их надо будет очень жестко контролить
то к чему я пришел это конечно далеко не идеал, но я все равно узнал огромную кучу инфы за последние пару дней и очень мощно прокачал понимание того, как все это работает
более подробно распишу позже)
на подработке же такого никогда не было, я вообще там по факту один за всех и ci/cd там был соответствующий, на коленке "шоб работал тока" - по ссх тыкаемся на контур, пулим с гита, гоняем миграшки, гоняем тесты и любые другие проверки - все сразу на контуре
если у вас внутри что-то от этих слов умерло, то поздравляю - вы адекватный человек
однако в эти каникулы мне пришлось плотно засесть за эту тему и по сути с нуля переделать весь ci/cd; все в связи с тем, что на некоторые проекты придется отдать на техподдержку и их надо будет очень жестко контролить
то к чему я пришел это конечно далеко не идеал, но я все равно узнал огромную кучу инфы за последние пару дней и очень мощно прокачал понимание того, как все это работает
более подробно распишу позже)
🔥6
Кстати, где-то как раз в первых числах января 2015го года я впервые сел за код
Естественно, не сам, подтолкнул меня на это мой очень хороший друг
Я вообще тогда программистов считал лютейшими задротами и вообще не понимал как у них голова от такого количества мозга не лопается, чтобы все это понимать
Прогать начал с джавы и первое что пришло в голову это калькулятор координат ада в майнкрафте
Потом решил делать игру про зомби - 2д рпг с видом сверху
Я иногда вспоминаю какой там был код и это был прям трешак трешачовый. Самое запоминающееся - не мог понять почему спавнится один зомби, а не 10, хотя я циклом проходил. Потом дошло, что наверное классы надо инстанциировать, а не 10 раз перезаписывать статические переменные😃 это было прям очень крутое откровение
И вот с тех пор я собственно ловлю вот этот дофамин от постоянных микро-улучшений в понимании кода и программировании, так остановиться и не смог
На тот момент до первого коммерческого опыта оставалось чуть больше 5 лет и очень большую часть этого времени я потратил на разработку игр. Ну как разработку - скорее попытки понять как из говна и палок с нуля сделать свой универсальный движок. Начинаю думать, что именно сама разработка игр меня не так уж и интересовала как решение проблем по разработке движка
10 лет, получается, дальше больше
Всем удачного начала рабочего года)
Естественно, не сам, подтолкнул меня на это мой очень хороший друг
Я вообще тогда программистов считал лютейшими задротами и вообще не понимал как у них голова от такого количества мозга не лопается, чтобы все это понимать
Прогать начал с джавы и первое что пришло в голову это калькулятор координат ада в майнкрафте
Потом решил делать игру про зомби - 2д рпг с видом сверху
Я иногда вспоминаю какой там был код и это был прям трешак трешачовый. Самое запоминающееся - не мог понять почему спавнится один зомби, а не 10, хотя я циклом проходил. Потом дошло, что наверное классы надо инстанциировать, а не 10 раз перезаписывать статические переменные😃 это было прям очень крутое откровение
И вот с тех пор я собственно ловлю вот этот дофамин от постоянных микро-улучшений в понимании кода и программировании, так остановиться и не смог
На тот момент до первого коммерческого опыта оставалось чуть больше 5 лет и очень большую часть этого времени я потратил на разработку игр. Ну как разработку - скорее попытки понять как из говна и палок с нуля сделать свой универсальный движок. Начинаю думать, что именно сама разработка игр меня не так уж и интересовала как решение проблем по разработке движка
10 лет, получается, дальше больше
Всем удачного начала рабочего года)
🔥7
Мой web-dev
я привык видеть такую картину (несколько стейджей, отдельно билд, отдельно линтеры, деплой по кнопке и тд) на работах, где были отдельные админы/девопсы, которые настраивали пайплайны и деплой за разрабов, оставляя нам только написание самих шагов в стейджах…
сегодня закончил перевозить последнее приложение на такую схему деплоя
ощущения просто бомбические
за месяц испытаний эта схема прям очень хорошо себя показала; да, есть косяки, но без них никуда
из плюсов:
1. дополнительный шаг билда образа позволяет заранее выявить, соберется ли вообще приложение на деве/проде; локально может оно все и отработает, но всякое бывает и лучше перестраховаться + такой подход потихоньку приближает нас к переезду в кубер; реджистри используется пока что локальный
2. прогон линтеров и тестов отдельными шагами в абсолютно изолированном окружении здорово помогает выявить косяки в настройке окружений, конфигах стилей, линтеров, а самое главное - тестах; нет ничего лучше узнать, что оказывается твои тесты валятся налево и направо, если поставить проект с нуля
сюда же к плюсам можно отнести отсутствие необходимости держать тестовые базы в основной базе, которая используется для реальных приложений, так как база сейчас поднимается для каждого пайпа своя и потом грохается со всеми потрохами
3. деплой по кнопке заслуживает отдельных восторгов
мне больше не надо ничего деплоить!
мое дело теперь простое - написать/исправить функционал, протестировать локально, запушить в отдельную ветку и сдать это все QA вместе со ссылками на пайп для раскатки на тестовый контур и МР в мастер; все! я спокойно живу дальше, куа сама раскатывает в дев, тестит и при прохождении тестирования сама прожимает "мерж" и функционал улетает на прод
херовый подход? может быть, но как и всегда главное то, что этот подход работает и работает весьма хорошо, если вы доверяете работу не макакам
4. креды больше не хранятся в чистом виде в репе
теперь все необходимые для ci/cd переменные заводятся через переменные в гитлабе, это здорово упрощает жизнь
конечно, перменные гитлабы лучше, чем репа, но лучше бы это вообще был vault
5. жизнеспособность
недавно взяли новый проект, с нуля, хостится он не у нас (уже раскатали дев-версию), там ровно такая же схема ci/cd и оно очень даже хорошо работает, при том что все было сделано посредством ctrl+c/ctrl+v из соседнего проекта, только креды ssh поменяли в переменных в гитлабе
из минусов:
1. мы теперь делаем билд для каждой ветки каждого проекта
это сжирает просто тонну места; я об этом сразу не подумал, а после перевода нескольких приложений на билды на следующий день гитлаб просто лег и не поднимался. потому что места на серваке на осталось
пришлось в экстренном темпе изучать способы зачистки места на серваке - от очистки прометеуса гитлаба до полного сброса билд-кеша докера (спойлер - это оказалось самым эффективным, очистилось 70гб)
2. ждать выкатки на дев щас приходится конечно чуть подольше
однако это решается тем, что это больше не моя забота, я только ссылки на пайпы для раскатки отдаю :D
3. это оказалось сложнее, чем предполагалось
когда ты что-то делаешь в первый раз, то море по колено, но море оказалось примерно на уровне жопы
приложений много (штук 10 или 11) - если где-то есть косячный кусок кода деплоя, то править его придется во всех местах
к счастью, это делается неспешно, можно с любой задачей эти правки затаскивать
тут конечно вообще идеальным был бы вариант выносить все что связано с деплоем в отдельную репу и править только в одном месте; дорастем, надеюсь
больше сказать пока нечего, маленькими шажками идем к светлому будущему!
ощущения просто бомбические
за месяц испытаний эта схема прям очень хорошо себя показала; да, есть косяки, но без них никуда
из плюсов:
1. дополнительный шаг билда образа позволяет заранее выявить, соберется ли вообще приложение на деве/проде; локально может оно все и отработает, но всякое бывает и лучше перестраховаться + такой подход потихоньку приближает нас к переезду в кубер; реджистри используется пока что локальный
2. прогон линтеров и тестов отдельными шагами в абсолютно изолированном окружении здорово помогает выявить косяки в настройке окружений, конфигах стилей, линтеров, а самое главное - тестах; нет ничего лучше узнать, что оказывается твои тесты валятся налево и направо, если поставить проект с нуля
сюда же к плюсам можно отнести отсутствие необходимости держать тестовые базы в основной базе, которая используется для реальных приложений, так как база сейчас поднимается для каждого пайпа своя и потом грохается со всеми потрохами
3. деплой по кнопке заслуживает отдельных восторгов
мне больше не надо ничего деплоить!
мое дело теперь простое - написать/исправить функционал, протестировать локально, запушить в отдельную ветку и сдать это все QA вместе со ссылками на пайп для раскатки на тестовый контур и МР в мастер; все! я спокойно живу дальше, куа сама раскатывает в дев, тестит и при прохождении тестирования сама прожимает "мерж" и функционал улетает на прод
херовый подход? может быть, но как и всегда главное то, что этот подход работает и работает весьма хорошо, если вы доверяете работу не макакам
4. креды больше не хранятся в чистом виде в репе
теперь все необходимые для ci/cd переменные заводятся через переменные в гитлабе, это здорово упрощает жизнь
конечно, перменные гитлабы лучше, чем репа, но лучше бы это вообще был vault
5. жизнеспособность
недавно взяли новый проект, с нуля, хостится он не у нас (уже раскатали дев-версию), там ровно такая же схема ci/cd и оно очень даже хорошо работает, при том что все было сделано посредством ctrl+c/ctrl+v из соседнего проекта, только креды ssh поменяли в переменных в гитлабе
из минусов:
1. мы теперь делаем билд для каждой ветки каждого проекта
это сжирает просто тонну места; я об этом сразу не подумал, а после перевода нескольких приложений на билды на следующий день гитлаб просто лег и не поднимался. потому что места на серваке на осталось
пришлось в экстренном темпе изучать способы зачистки места на серваке - от очистки прометеуса гитлаба до полного сброса билд-кеша докера (спойлер - это оказалось самым эффективным, очистилось 70гб)
2. ждать выкатки на дев щас приходится конечно чуть подольше
однако это решается тем, что это больше не моя забота, я только ссылки на пайпы для раскатки отдаю :D
3. это оказалось сложнее, чем предполагалось
когда ты что-то делаешь в первый раз, то море по колено, но море оказалось примерно на уровне жопы
приложений много (штук 10 или 11) - если где-то есть косячный кусок кода деплоя, то править его придется во всех местах
к счастью, это делается неспешно, можно с любой задачей эти правки затаскивать
тут конечно вообще идеальным был бы вариант выносить все что связано с деплоем в отдельную репу и править только в одном месте; дорастем, надеюсь
больше сказать пока нечего, маленькими шажками идем к светлому будущему!
🔥2
сегодня я превзошел сам себя
из всех максимально тупых случаев в программировании сегодня выдался особенный
на подработке активно выводим новое приложение на дев-контур
все в лучших традициях стартапа - накатываем данные, тут же ловим ошибки, тут же правим - и все по-новой
но на контуре ты никак не подебажишь импорт, а мне очень надо было
выход простой - локально подрубаемся к дев-базе и стартуем импорт
мы можем дебажить спокойно, а результат все равно окажется на деве - все довольны
и все бы хорошо, но внезапно перезапуск импорта через интерфейс стал отваливаться с ошибками мол файл не найден
да как не найден-то? я его вот своими глазами вижу - ls показывает, что файл есть, через less я прекрасно вижу содержимое
самое интересное, что заходим в логи супервизора, который гоняет джобы по импорту и не видим логов!
а еще лучше - на самом деле иногда-то логи видим, но там как получится
а еще лучше - в интерфейсе почему-то в обработке висит два импорта, хотя инстанс супервизора у нас один
а еще лучше - в ошибках импорта (в базе отдельная колонка) текст из кода, который час назад уже выпилен был
то есть кто-то помимо дев-контура берет джобы в работу и плюется ошибками
я прошел все стадии гнева и агонии - от полного покрытия логами куска кода, который открывает файл до полной переработки конфига супервизора
еще круче стало, когда я отказался от супервизора в пользу крона (ну вдруг супервизор сошел с ума)
вырубаешь таску в кроне, смотришь ps aux - глухо, ни одного запущенного процесса в кроне
а джобы все равно обрабатываются и валятся с ошибкой!
и знаете какой ответ у этого всего?
этот кто-то - я, но локальный и у которого коннект к базе на деве, а очередь джоб как раз лежит в табличке)
🙄
из всех максимально тупых случаев в программировании сегодня выдался особенный
на подработке активно выводим новое приложение на дев-контур
все в лучших традициях стартапа - накатываем данные, тут же ловим ошибки, тут же правим - и все по-новой
но на контуре ты никак не подебажишь импорт, а мне очень надо было
выход простой - локально подрубаемся к дев-базе и стартуем импорт
мы можем дебажить спокойно, а результат все равно окажется на деве - все довольны
и все бы хорошо, но внезапно перезапуск импорта через интерфейс стал отваливаться с ошибками мол файл не найден
да как не найден-то? я его вот своими глазами вижу - ls показывает, что файл есть, через less я прекрасно вижу содержимое
самое интересное, что заходим в логи супервизора, который гоняет джобы по импорту и не видим логов!
а еще лучше - на самом деле иногда-то логи видим, но там как получится
а еще лучше - в интерфейсе почему-то в обработке висит два импорта, хотя инстанс супервизора у нас один
а еще лучше - в ошибках импорта (в базе отдельная колонка) текст из кода, который час назад уже выпилен был
то есть кто-то помимо дев-контура берет джобы в работу и плюется ошибками
я прошел все стадии гнева и агонии - от полного покрытия логами куска кода, который открывает файл до полной переработки конфига супервизора
еще круче стало, когда я отказался от супервизора в пользу крона (ну вдруг супервизор сошел с ума)
вырубаешь таску в кроне, смотришь ps aux - глухо, ни одного запущенного процесса в кроне
а джобы все равно обрабатываются и валятся с ошибкой!
и знаете какой ответ у этого всего?
этот кто-то - я, но локальный и у которого коннект к базе на деве, а очередь джоб как раз лежит в табличке)
🙄
😁1🤔1👀1😨1
хороший друг создал свой канал с новостями по ИИ, подпишитесь, если интересно)
https://t.me/ashfeeds
https://t.me/ashfeeds
Telegram
ash
Привет! Я — Ash, бот-ассистент. Я читаю за тебя сотни ИИ-статей и делаю из них мини-дайджесты.
🔥1
Какое-то время назад на подработке я пытался нормально настроить логирование приложений
Все логи сыпались в stdout контейнера, потом докер отправлял все эти логи в fluentd, который уже в свою очередь их направлял в эластик
И в целом оно работало, пока я не зашел в эластик и понял, что логов за последние полгода попросту нет :D
При этом в контейнерах логи были и я собственно поэтому проблемы и не замечал, потому что пользовался напрямую логами контейнера
Полез разбираться - проблема оказалась во fluentd, который почему-то очень не хотел контачить с эластиком. Сначала он выдавал, что ловит от него таймаут, а после перезапуска контейнера и вовсе отказался к нему коннектиться
Я еще во время настройки fluentd досыта наелся с ним проблем, поэтому меня посетила гениальная мысль
"Настало время нейронок"
Мне был недавно выдан доступ к агрегатору нейронок, полез туда
Выбрал Claude 4 Opus. Ну клод же, ну гений программирования, аж опусом зовут
Ну и говорю ему "братан, вот такое окружение, вот такой конфиг, вот такая ошибка - выручай"
Он очень долго думал, в итоге выдал 3 или 4 файла, которые должны были привести меня к успеху
Перепробовав несколько решений и конфигов, fluentd по-прежнему отказывался контактировать с эластиком
Я честно долго пытался и мучал клода поиском решения, но в результате ничего
В конце концов сам клод сдался и написал "6. (Optional) Use Fluent-Bit as an Alternative"
И это было его лучшим предложением
Я прогнал мой имеющийся конфиг fluentd через дипсик для конвертации в конфиг для Fluent-Bit и оно завелось после двух правок
Теперь у нас логи счастливо улетают в эластик и им наконец-то можно пользоваться, а не лазить в логи контейнера
Я так до сих пор и не понимаю, как люди целые проекты пишут с помощью нейронок
И все так же остаюсь убежденным, что нейронка не более чем +- полезный инструмент, а не полноценный спутник-разраб
Все логи сыпались в stdout контейнера, потом докер отправлял все эти логи в fluentd, который уже в свою очередь их направлял в эластик
И в целом оно работало, пока я не зашел в эластик и понял, что логов за последние полгода попросту нет :D
При этом в контейнерах логи были и я собственно поэтому проблемы и не замечал, потому что пользовался напрямую логами контейнера
Полез разбираться - проблема оказалась во fluentd, который почему-то очень не хотел контачить с эластиком. Сначала он выдавал, что ловит от него таймаут, а после перезапуска контейнера и вовсе отказался к нему коннектиться
Я еще во время настройки fluentd досыта наелся с ним проблем, поэтому меня посетила гениальная мысль
"Настало время нейронок"
Мне был недавно выдан доступ к агрегатору нейронок, полез туда
Выбрал Claude 4 Opus. Ну клод же, ну гений программирования, аж опусом зовут
Ну и говорю ему "братан, вот такое окружение, вот такой конфиг, вот такая ошибка - выручай"
Он очень долго думал, в итоге выдал 3 или 4 файла, которые должны были привести меня к успеху
Перепробовав несколько решений и конфигов, fluentd по-прежнему отказывался контактировать с эластиком
Я честно долго пытался и мучал клода поиском решения, но в результате ничего
В конце концов сам клод сдался и написал "6. (Optional) Use Fluent-Bit as an Alternative"
И это было его лучшим предложением
Я прогнал мой имеющийся конфиг fluentd через дипсик для конвертации в конфиг для Fluent-Bit и оно завелось после двух правок
Теперь у нас логи счастливо улетают в эластик и им наконец-то можно пользоваться, а не лазить в логи контейнера
Я так до сих пор и не понимаю, как люди целые проекты пишут с помощью нейронок
И все так же остаюсь убежденным, что нейронка не более чем +- полезный инструмент, а не полноценный спутник-разраб
😁1
Вы живые тут еще?) как дела?)
Я вот в отпуск сходил в начале июля на две недели. Такого разработческого детокса у меня еще никогда не было
Две недели на даче работал руками. Починил и достроил абсолютно все что хотел и впервые ходил в свою собственную, своими руками сделанную баню🥹
А еще я с подработки уволился. Последней каплей стал как раз отпуск за который я заработал там ровно ни-че-го из-за почасовки. И вообще задолбался настолько, что открывал таск-трекер и хотел блевать. Допинываю остатки проектов и до свидания. Эти полтора года были не зря, опыт колоссальный, но мне хватит)
Времени теперь будет вагон и я точно найду что с ним сделать полезного, потому что после отпуска ценность времени в моих глазах возросла кратно и речь теперь уже не о деньгах
Я вот в отпуск сходил в начале июля на две недели. Такого разработческого детокса у меня еще никогда не было
Две недели на даче работал руками. Починил и достроил абсолютно все что хотел и впервые ходил в свою собственную, своими руками сделанную баню🥹
А еще я с подработки уволился. Последней каплей стал как раз отпуск за который я заработал там ровно ни-че-го из-за почасовки. И вообще задолбался настолько, что открывал таск-трекер и хотел блевать. Допинываю остатки проектов и до свидания. Эти полтора года были не зря, опыт колоссальный, но мне хватит)
Времени теперь будет вагон и я точно найду что с ним сделать полезного, потому что после отпуска ценность времени в моих глазах возросла кратно и речь теперь уже не о деньгах
🔥6👍5
В связи с наличием огромной кучи времени, за последний месяц прошел халфу 1, халфу 2, оба эпизода, оба портала
Это было просто невероятно
Я в особенном восторге от портал 2 - такой атмосферности и красоты окружения я не видел давно, хотя игре сто лет в обед
Но в целом и все остальные игры выглядели прямо очень достойно для своих лет
Щас вот думаю во что дальше рубиться
Ну и запоминайте как должен выглядеть завтракчемпиона здорового человека😄
Это было просто невероятно
Я в особенном восторге от портал 2 - такой атмосферности и красоты окружения я не видел давно, хотя игре сто лет в обед
Но в целом и все остальные игры выглядели прямо очень достойно для своих лет
Щас вот думаю во что дальше рубиться
Ну и запоминайте как должен выглядеть завтрак
👍4🔥2
Хоумлаб ч.1
Прошло больше полутора лет как я завел себе домашний сервер, но очень быстро забил на него - ни времени, ни желания, ни реальной пользы
А в последнее время снова проснулся интерес, но в этот раз у меня есть реальные планы на переход на домашнее облако
И вот месяц назад я купил себе комплект на зеоне, корпус и бп уже были и …. И так у меня стояла эта сборка целый месяц, потому что в зеоне (внезапно😁) нет встроенного видео и поставить систему без него не представлялось возможным (ну или можно, но я не изучал вопрос)
А вот вчера пятничное настроение выдало идею использовать видяху из основного компа, а значит пришлось городить франкенштейна
Прошло больше полутора лет как я завел себе домашний сервер, но очень быстро забил на него - ни времени, ни желания, ни реальной пользы
А в последнее время снова проснулся интерес, но в этот раз у меня есть реальные планы на переход на домашнее облако
И вот месяц назад я купил себе комплект на зеоне, корпус и бп уже были и …. И так у меня стояла эта сборка целый месяц, потому что в зеоне (внезапно😁) нет встроенного видео и поставить систему без него не представлялось возможным (ну или можно, но я не изучал вопрос)
А вот вчера пятничное настроение выдало идею использовать видяху из основного компа, а значит пришлось городить франкенштейна
❤1