Ну, лично у меня в приложении написанном на питоне 4 года назад отвалились все функции использующие регулярные выражения, потому что библиотека обновилась.
Ну, лично у меня в приложении написанном на питоне 4 года назад отвалились все функции использующие регулярные выражения, потому что библиотека обновилась.
Можно. Потом версия либы пропала из хранилища релизов, но это решается вендорингом. Потом обновилась другая либа, и обновленная общая зависимость не подходит этой, но это решается раздельными версиями зависимостей. Потом для обновления третьей либе нужна новая языка, и тут уже грусть-печаль.
Всё решается, но иногда переписать действительно дешевле.
Можно, это "вендоринг" (запихать стороннюю библиотеку в свои сорцы). Есть и промежуточные решения, например держать зеркало или хранилище артефактов для зависимостей. Пока нет необходимости обновляться работает неплохо.
А потом от клиентов приходит письмо от их безопасника, где он пишет, что в древних либах дохера уязвимостей (список прилагается), обновите пжалста, а то мы солидный банк и не хотим, чтобы данные наших клиентов воровали хацкеры. Как раз сейчас этим на работе занимаюсь.
Так пожалуйста. Если клиент хочет, то он это оплатит. Менять версии либ в виде законной таски, на которую выделено время, и за которую платят, это не то же самое, что "внезапно вляпаться в депенденси хелл из-за того, что стоит автообновление версий, и кому-то из авторов либ моча в башку стукнула особенно сильно".
так клиент и платит. если у тебя сервис, который нужно поддерживать, то "переписывать" нужно будет 100%. ну а частота переписывания уже зависит от языка.
скрытый юмор поста в том, что на си никто не пишет поддерживаемые сервисы
Ну так понятно что обновления должны быть контролируемы, а не "на чём соберёшься, на том и запускайся".
На самом деле не важно что делаешь, пока оно умеет принимать информацию - оно взламывается. Если есть требование к безопасности и возможность обновления прошивки, обновляться все-равно придется. Даже если твой продукт - умная лампочка.
А лично я уверен, что в этом коде Андрея Чернова уязвимостей нет. Хотя бы потом, что решаемая задача такая, несмотря на то, что входные данные она принимает и обрабатывает. Ну и ещё потому, что это ache@
В мире известно достаточно хороших программистов и хорошего кода. Включая достаточно объёмный код с хорошим функционалом, в котором не только уязвимостей мало или нет, но вообще ошибок. Классический пример это кнутовский \TeX с первоначальным релизом в 1978 году (TeX78). В релизе TeX82 он уже стал полным по Тьюрингу языком. TeX 3.0 вышел в 1990 году и с тех пор в него добавляются только багфиксы и с каждым багфиксом к версии добавляется очередная цифра числа pi, так что нынешняя версия 3.141592653, последняя была добавлена в 2021.
Девять багфиксов за 31 год.
Не надо ориентироваться на говно. И не надо признавать говно неговном.
код - меняется, интерфейсы - да, дедова нива. По "общепринятому подходу" - полуправда же. Картинка действительно хорошо описывает реальность. Если софтину пишет олдскульщик - проблем не возникает, совместимость на огромном разлете версий а сверху еще в течении лет 5 прилетает варнинг о том что метод "деприкейтед" но продолжает работать. У самого уже наверно 10 лет коллекция в либе таких, народ просит не трогать, так как использует.
А когда приходится иметь дело с каким руби, питоном, итп - постоянно "общепринятый подход" мозг ебет в духе "нам похуй, переписывай".
Ну вот есть у тебя интерфейс к драйверу который ты в рамках фреймворка используешь. Драйвер или либа перестали поддерживаться и взломали их тучу раз вдоль и поперек. Интерфейс в фреймворке удаляется потому что нехуй использовать это говно.
Последнее что отваливалось - либа от соседней команды, ибо логика поменялась и старую использовать - некорректно, так что хуй тебе, а не деприкейт. Да и кучу деприкейта поддерживать никому нахер не уперлось. Особенно когда новые интерфейсы могут всё то же что и старые, а ещё сверху куча фич.
В среднем я не согласен с подходом "нам похуй, переписывай". Я со всем этим сталкиваюсь, но решаю удобнынм для конечного пользователя способом.
Да, бывают ситуации, когда ну прямо совсем никак, потому что авторы сторонних либ тоже из секты "нам похуй, переписывай", но в среднем стараемся сохранить интерфейсы, а изменившуюся логику прятать под капотом.
Сам так делал, но бизнес логика требует изменений. Да и в какой-то момент поддержка старого интерфейса становится нецелесообразной, вот там мы и обновляем мажорную версию
А можешь мне, любитель контейнеров и докера, сказать, знаешь ли ты, зачем люди обновляют библиотеки? Или ты из тех, кто считает, что их обновляют только чтобы насолить пользователям?
Поэтому я пишу скрипты на POSIX shell. Он стандартизирован и вечен, а его выразительных средств достаточно, например, для написания SMS-шлюза для внутриконторского использования. Пашет уже 8 лет, переписывать незачем. Конфиг ему правил последний раз два года назад.
Вот только у шелла худший в мире синтаксис (всякая эзотерика не в счëт) и читать большие скрипты это очень больно, а ещё сам по себе шелл умеет немногим больше нихуя и почти всю работу делают бинари, которые ты вызывает и эти бинарники тоже неплохо бы обновлять...
Нормальный у POSIX shell синтаксис, if-then-else-while-for-do-done. Похож на паскалевский, который вообще для обучения детей программированию был придуман. В POSIX shell код можно разбивать на функции с локальными переменными. И правило "30% объёма текста должны составлять комментарии" никто не отменял, не надо быть ленивой жопой. А говнокод писать можно на ЛЮБОМ языке, инфа 100%.
Ну да, без бинарей никуда, поглядел в код своего шлюза: logger, realpath, mkdir, stat, lockf, timeout, gnokii, sleep, date, mv, jot, cat, ln, rm, nohup. Всё остальное shell built-ins. Почти все утилиты из POSIX.1, так что их обновление ничего не ломает, это стандарт.
>if-then-else-while-for-do-done. А потом ты узнаëшь охуительные фокусы по типу того, что [ это бинарник и пробел после неë обязателен, иначе всë сломается и прочее подобное. Да и базовый синтаксис, состоящий из закорючек чуть менее, чем полностью читабельности не добавляет. А ещё совершенно разный функционал у похожих операторов типа | и ||
А причем тут баш? Речь шла про POSIX shell, а вовсе не про bash, который к *стандарту* POSIX отношение имеет отдаленное. И не смотря на то, что [ это бинарник и его можно вызывать как /bin/[ , тем не менее в шелле у меня команда "type [" говорит, что это builtin (как и printf и много чего ещё). Пробел после любой команды обязателен, почему это тебя смущает? И не путай с перлом, в базовом синтаксисе POSIX shell очень немного закорючек, возможно ты путаешь с bash. Стандарт почитай. Или хотя бы учебники.
>Пробел после любой команды обязателен, почему это тебя смущает? Потому, что открывающая скобка не должна быть, блин, командой! Везде можно писать хоть "if(expr){..." без пробелов, но щель у нас особенная.
>Почему нет? Потому что возможность вызвать команду `if[` выглядит не так необходимо, чтобы это нельзя было обработать лексером (я понимаю, что там всё сложно, и тогда нельзя уже будет сделать [[, но всё же). >отступы везде должны быть свободными и незначимыми Так, про эти недоразумения мы не говорим :-) Вообще, да, у каждого языка свои требования, но тогда я утверждаю, что эти требования неудобны мне, как программисту.
Если единственная претензия к синтаксису состоит в том, что видители пробел после if ставить тебе неудобно, то это прекрасная рекомендация языку, ящитаю :-)
Ну, именно к синтаксису это и правда самая большая претензия. Так-то я не спорю, язык очень хороший, но блин, кому от отсутствия этого пробела станет хуже? if-fi и так не являются бинарниками, [ - builtin, это и так надо парсить на стороне щели. Язык мог бы быть чуть лучше.
Это с лихвой компенсируется тем, что на язык есть СТАНДАРТ. То есть, правильно написанные скрипты на нём никогда не станут устаревшими из-за того, что появились "улучшаторы", которым захотелось улучшить язык и сломать обратную совместимость, как в Python3 по отношению к Python2.
>Писать как хочешь - это деградантство Да, но тут проблема не в том, что я хочу так писать, а в том, что я случайно забыл поставить пробел, а всё, что мне говорит щель - это `missing ]` (благо из-за того, что это builtin, он хотя бы строчку показывает). Возможно, спустя время я могу научиться читать эти ошибки, но только спустя время. Это беспричинно обособляет щель от других языков программирования, из-за чего язык чувствуется необосновано сложным.
Ааа, ты у мамы древний бородатый и решил тут повыёбываться какое говно мамонта крутое, а ебаные зумеры не шарят хуйнёй страдают, ну тогда можешь себе в кронтаб закинуть poyti_nahuy.sh
- написал программу - прошло четыре года. забыл про программу полностью - открыл исходный код какой то малопонятной утилиты. долго возмущался какой криворукий осел все это понаделывал? разве он про virtualenv и докеризацию не слышал? Или что можно зафиксировать версии либ в рекваерментах каких-нибудь? Все переписал. - пока переписывал нашел комментарий от автора. Оказалось что программа твоя. - прошло четыре года...
Звучит тупо пока реально такое не происходит. Нашел в архиве чатика в телеге хороший пост по нужной проблеме. Захожу в личку к челу, а у него там порнуха. Оказалось мой фейк
Ага, хуй там. Спринг 3 требует 17 джаву, а во втором критическая уязвимость которую никто исправлять не будет. Да и саму джаву ломают время от времени, надо обновляться
код то менять практически не нужно, зависимости в поме поменял и вперед, при переезд 8 -> 17 жава, древние проекты на аксис только пришлось чутка переписать и где были совсем уж старые либы, которые удалили из стандартного набора jdk, пришлось просто добавить в зависимости как внешние
С 8 на 11 перезжал с болью. С 11 на 17 лютого пиздеца не замечено. А вот спринги - вечный пиздец. Ресттемплей ему больше не нравится, сваггер вообще сменил поставщика, где-то аннотации отвалились...
И любые другие либы, и контейнеры сервлетов, и докеры/куберы, да можно и от операционок на серверах отказаться. Адекватных альтернатив спрингу нет. И альтернатив многим другим либам тоже.
Эх, а вот в старые добрые времена https://www.jwz.org/doc/cadt.html Для тех кто не умеет в английский автор из 2003 жалуется на то, что много опен сорсных проектов вместо того чтобы фиксить баги закрывают их с пометкой "мы переписали наше приложение с нуля и не поддерживаем старую версию". Обзывает это "каскадом подростков с дефицитом внимания". И да, речь про приложения на том самом С из поста.
Хм, вводные: проект С# жмёт на кнопки в чужом≥. ПО 2003г.в. на делфи. ничего не обновляется, а софтина перестает запускаться, компилирую снова не меняя ровно ничего - работает. день, два, неделю и снова компиляция. Подкиньте умных мыслей)
как как вариант, раз ПО на делфи, то как-то меняется расширение экрана и координата перестает попадать по кнопке. Из разряда, свернул, развернул - нифига не пашет. перекомпилировал, координаты снова стали попадать куда нужно.
Спасибо но нет, окна жёстко зафиксированы на столе, уже 5 лет они не перемещаются по столу. Вопрос исключительно в отказе запуска без свежей компиляции
раз у тебя есть исходники - добавь логирование в файл. я не знаю как реализовано, но по простому генерируется системное событие клика мышки по координатам. тут или приложение начинает промахиваться, или приложение виснет по каким-то причинам (но тогда помогала бы простая перезагрузка). не представляют особо как компиляция помогает, если только не какая-то проблема с координатами.
не кликаю мышкой, на уровне винды разбираю окно на компоненты, аналогично парсингу имеется список контролов окна с которыми взаимодействует софтина) Это если поверхностно, если углубиться то разбирать окно я пытался два года и достиг таки, а вот двигать курсор по экрану програмно это швах, ибо малейшее прикосновение к мыши ломает всю суть
ну, вы пошли явно не простым путем. я бы все таки добавил лог файл и писал туда что происходит, особенно если ошибки в коде глушатся. по крайней мере будет ясно что утилита не повисла.
Ну, нажимать одну кнопку или десять каждую минуту, благодаря этим извращениям время на печать сократилось и продуктивность выросла на 70%> результат однозначный.
Другое дело если бы это для картинки посмотреть было, речь о реально работающем софте всё же, пусть и велосипед пришлось изобретать заново)
Выбираем первый язык программирования
Да
т
У вас есть друзья?
i
Да
Т
Хотите много зарабатывать?
jL
Да
ш
Вы тупой?
т.
Т
Вы насмотрелись уроков ХАУДИ ХО?
/Г
Да
7
Python
Вам
г~ нравится 1
1 Windows?
Нет
Fortran
А они вам нужны?
Они тоже РНР
тупые?
Да
т
#23 • 295239698
перепись долбоёбов вкатунов открыта. Когда вы наконец поймете что языки программирования это всего лишь инструмент, каждый заточен под свои задачи, это как обсуждать что круче: молоток или паяльник, более того, половина питоновских фреймворков под капотом написана на других языках.
Отличный комментарий!