Лучше бы в Голдратта почитали. Попытка убирать неэффективность в каждом звене - это много работы с околонулевым результатом. Определяйте ограничение системы - и дальше "барабан-веревка в помощь"...
Уже десять раз говорили: для разнообразия есть такое отделение "морозилка". Сделал еды на неделю - поставь половину в морозилку. Взамен достань на половину недели что-то замороженное до того!... Хочешь еще больше разнообразия - ну морозь две трети в разные контейнеры...
А есть люди, которые каждые пять минут руки моют с мылом. Потому что им все время кажется что они какие-то грязные. В принципе, если кроме этого у пациента других странностей нет - то можно и не лечить. Однако, ставить его привычки в пример нормальным людям - совершенно точно не следует...
А то что в Сибири традиционное блюдо - вареники с картофелем - замораживаются и месяцами хранятся при T<-15C - а потом готовятся путем кипячения в кастрюле (тесто варится, картошка размораживается) - вас никак не смущает ? ИМХО при такой чувствительности к свежести продуктов - надо или дегустатором идти в мишлен (если это объективно такой тонкий вкус), или лечить у врача голову (если нет).
СанПиН надо понимать именно так, как его надо понимать - это охрана общественного здоровья. То есть, предотвращение риска массового отравления при промышленном приготовлении и хранении пищи. И я, разумеется, никоим образом не считаю что в промышленности и торговле можно допускать отступления от норм и правил. Каждый раз когда это происходит - кто-то да травится (вон на прошлой неделе опять в детском лагере!...). Однако, пытаться съесть петрушку за 48 часов когда она может лежать в вашем холодильнике и неделю (может и больше - но есть вы ее скорее всего не заходите ибо невкусно - хоть и ничего с вами не будет) - это уже скорее в разряд повышенной тревожности и сходных с ней психических состояний.
Вы наверное этого себе представить не можете, но раньше холодильников не было - а продукты все-равно хранили. В леднике, в ведре с колодезной водой, а то и просто ямку в земле копали... Тогда конечно отравления случались чаще - но человечество выжило (и боялось голода, а не петрушки и сельдерея перележавшего вторые сутки). После изобретения холодильников все стало сильно веселее, и в своем широком окружении - я вообще не помню в период с середины 1980х случаев отравления домашней едой. В столовых и кафе травились - это было. А под "домашним пищевым отравлением" строго понималось похмелье, а не вот это вот всё...
У больших производителей есть два-четыре раза в месяц производственное совещание, где финансовый менеджмент сношает закупщиков и технологов чтобы те им обеспечили 15-20 процентов маржи несмотря на растущие цены. Технологи ищут способы вбить больше воды в продукт, а закупщики меняют "яйцо куриное" на "пищевкусовую добавку со вкусом 'яичный порошок' ". Потом сношают маркетинг чтобы те придумали такую упаковку и конкурсы чтобы результат все-равно покупался. Потом всех сношает торговая сеть требуя скидку, участие в маркетинговой акции и ретробонус. Единственное в чем вы можете быть более-менее уверены - получившееся гуано (в красочной упаковке "Из мяса молодых бычков") совершенно безопасно для здоровья. Всё остальное в торговой сети и крупном производственном холдинге работает абсолютно против вас...
Вам кто-то мешает 1/2 супа в тот же день заморозить ? Теперь каждый день у вас суп не старше 3 дней с даты изготовления... Уж у супа-то текстура более водянистой точно не станет. А если вы посмотрите на срок хранения стерилизованного супа в консервных банках?... :-)
Вы же понимаете, что СанПиН делается для предприятий-изготовителей и торговли. И сроки там даются с огромным запасом по двум причинам: чтобы при незначительных погрешностях в технологии изготовления не отравить массу людей; и чтобы потребитель (которого мы проконтролировать не можем) смог без последствий поставить несъеденный в ресторане салат в холодильник и съесть его завтра. Если вы верите что петрушка через 48 часов хранения в холодильнике (по СанПиН) становится смертельным ядом - я даже не знаю что сказать... В реальности я видел протоколы закладок на определение срока годности колбасных изделий: это образцы с одной и той же партии ложатся на хранение, и каждый день делается анализ на микробиологию. Как только в худшем образце она вышла за границы нормы (скажем, на 32 день) - от получившего срока отнимается расчетный срок хранения у потребителя, резерв для гарантии безопасности при технологических нарушениях, и, грубо говоря - на упаковке пишется: 20 суток. И для дополнительной гарантии - "...после вскрытия упаковки употребить в течение 48 часов". Хотя еще раз - в тестовой выкладке оно лежало все тридцать два, прежде чем хотя бы теоретически получило возможность вызвать даже не отравление, а легкое пищевое расстройство (справедливости ради - путь от поноса до полноценного пищевого отравления с больничкой это уже очень быстро - бактерии плодятся экспоненциально).
Это я не к тому, что надо жрать все что попало, или доводить продукты в холодильнике чтобы заплесневели, и потом их все-равно есть! Это я к тому что СанПиН пишется не для конечного потребителя...
Страшно то, что она до этой дури не сама додумалась - а ее этому учила семья и школа! И курсы инфоцыган. И "управленческие поединки"... Я не люблю российский бизнес за то, что он как сформировался в 90-е в околобандитской среде - так никогда оттуда и не вышел. Основной способ добывания прибыли - удачно кинуть или прожать контрагента! В период "больших денег" (скажем, после 2006, но до 2014) - начинал образовываться какой-то налет цивилизации. Но с первыми экономическими проблемами - он испарился... А курсы "жосских переговорщиков" продолжают успешно продаваться и покупаться...
Вот то-то у нас почти вся страна ведет себя так, как будто каждая сделка - последняя. Пять копеек сейчас любой ценой! Впрочем, глядя на то, во что превратилось государство и страна - трудно их винить. Хотя - они и до 2022 года были плюс-минус такие же...
Да как вы добиваетесь такого эффекта ?! Мы же не о заморозке до -18 говорим, да? Сколько лет мы ели картофельное пюре из холодильника - оно никогда не слипалось в твердый ком! Ни на молоке, ни на "собственном соку" (спасибо 90-е...). Я вижу только один вариант как это сделать - вбухнуть туда пачку сливочного масла - но так никто никогда не делал... Жареное от охлаждения (+5...+8) не отмокает. Проверялось неоднократно на шашлыках, котлетах и далее по списку! Салат прекрасно хранится в холодильнике несколько дней при условии что вы его не солите и не заправляете сметаной/майонезом. Да и после нового года доедать салаты из холодильника (заправленные!) пару дней (и не готовить вообще!) - как здрасьте! И ни у кого воды в тарелке не наблюдалось, и текстура ни у кого не терялась. То-ли климат у нас в Сибири другой, то-ли продукты, то-ли люди...
И тем не менее, первые договоры об ограничении вооружений между СССР и США проводились именно по этому методу. И таки-да, обе стороны сошлись на том что безопасность жизни на планете для всех (включая их самих) не увеличивается от того что они могут гарантированно взаимно уничтожить друг-друга не один раз, а целых шесть-восемь... Внезапно у двух совершенно противоположных общественно-политических систем нашлись общие интересы!...
Готовить каждый день еду - это только от безделья! Ладно 5 минут свежий салат нарезать... А общественно-необходимые затраты на приготовление еды - это 2-4 часа, только не в день - а в неделю! И это еще худший случай: когда еда готовится на одного человека. Если еда готовится на семью из 3-4 человек, то есть еще положительный эффект масштаба!
Какие два часа срок годности приготовленных продуктов ?! После тепловой обработки - у вас еда в кастрюле считай стерильная. Пока вы первый раз крышку не открыли и туда не залезли руками - она может и день вне холодильника стоять, и ничего ей не будет. Дальше - мы уже сто лет живем после изобретения холодильника. Там еда охлаждается до +5С. Если вы ее положите в контейнер и не будете прятать под одеждой - она будет нагреваться, но за 2 часа пока вы доберетесь до работы - нагреется, ну скажем, до +10+12С в толще продукта. А на работе у вас опять холодильник! В регионах до сих пор работяги носят в ночные смены еду в контейнерах, греют в микроволновках и принимают в комнате приема пищи. И нет кишечных болезней... А смена - это не два часа, и не восемь - а двенадцать!
Ну вот я же выше писал паттерн "catch+log+rethrow"! Это он и есть: поймали внизу иерархии, залогировали (с инфой которая есть в этом месте), и перебросили дальше. :-)
Очень сильно зависит от требований к приложению, ИМХО. Если в конце этих перехватов надо записать лог и показать пользователю "Произошла непредвиденная ошибка. Попробуйте еще раз. Trace-id=..." - то все эти перехваты и перевыбросы другого типа становятся явным излишеством. Поэтому мы перехватывали и перевыбрасывали только там, где были явные требования к error recovery.
Мы в проекте использовали следующее соглашение: методы можно объявлять либо без throws, либо с throws Exception - и больше никак (т.е. никаких IOException, MyCustomException в описаниях нет, и быть не может). Дальше правила жизни:
Если ты вызвал функцию которая throws Exception, но не хочешь/не можешь делать error recovery (99% случаев) - пометь свою функцию throws Excepton, и живи дальше (очень похоже на то, к чему в конце-концов пришел C++).
Если ты хочешь сделать error recovery - то лови только те исключения, которые ты можешь/хочешь обработать именно на этом уровне.
Категорически запрещается ловить и проглатывать произвольное исключение. Разрешается (хотя и не поощряется) подход catch+rethrow - обычно это паттерн catch+log+rethrow. Загромождает логи, но иногда нужно для более быстой локализации проблем.
На верхнем уровне есть обработчик исключений который их логирует, и в зависимости от типа - или терминирует приложение, или поток, или только логирует и надеется что оно как-то само рассосется.
Если ты вызвал throws-функцию из какого-нибудь интересного типа а-ля Runnable - убери руки от клавиатуры, и подумай что ты делаешь! Либо у тебя в твоем Runnable должен быть аналог обработки исключений верхнего уровня (как минимум, залогировать). А как максимум - обсуждать с лидами архитектурную проблему: скорее всего где-то кто-то будет ждать побочный эффект нашего runnalbe, который никогда не наступит. И тут нужна асинхронная обработка ошибок - что есть отдельная песня и отдельный свод правил.
Если делать совсем правильно - то в архитектуре приложения со слоями, каждый слой должен ловить любой Exception который произошел в нижних слоях, и транслировать его в логический эксепшн выраженный в терминах, которыми оперирует именно этот слой. А в качестве "причины" - передавать as-is эксепшн из нижележащего слоя. Например - слой отвечающий за витрину магазина делает запрос в сервис который определяет динамическую цену. Тот лезет, скажем, в базу и получает transaction error. Идеологически правильно будет перехватить этот Transaction Error в сервисе динамической цены и обернуть его в бизнес-эксепшн DynamicPriceNotAvailableException(..., underlyingException). Тогда сервис витрины может хоть как-то сделать recovery из этой ситуации: то ли показать backup статическую цену, то ли пропустить товар, то ли сделать что-то еще. Однако, такие заморочки нужны, ну скажем в 10% случаев когда что-то кидается.
Обязательная оговорка - речь идет о системе не mission-critical класса. Если вы пишете софт для кардиостимулятора или контроллера тормозов - правила относительно исключений и их обработки будут жестче - сильно жестче!
Отказываться от исключений и возвращаться к return value - я считаю нерациональным.
Мы привыкли к тому, что бюджет выполняет ограничивающую функцию. И это в принципе, так. Однако - бюджет может и должен выполнять разрешающую функцию. Если вы занялись бюджетированием не в тот момент когда "поздно пить боржоми" (все свободные деньги уходят на выплаты по кредитам) - у вас есть какой-то свободный денежный поток. И вы можете определить, какую его часть вы собираетесь тратить на всякую фигню. И не испытывать тревоги или угрызений совести пока вы это делаете в рамках бюджета который сами с собой обговорили.
Собственно - отдельное искусство - строить реалистичный бюджет. А то народ прочитает умную книжку про инвестиции, сверстает заведомо неисполнимый бюджет - потом его не исполнит, прийдет к выводу "бюджет не работает", и соскочит... Первые бюджеты вообще надо составлять по историческому факту - если вы в предыдущие месяцы/недели/годы тратили X на статью расходов Y, то это значит что и в этом месяце вы скорее всего сделаете то же самое. А дальше уже смотрите, какие расходы у вас растут - и с этим ничего не поделать, а где есть пространство для маневра. И нет, практически бессмысленно срезать расходы на 50-70%: получается нереалистично и unsustainable. Срезайте по 1-3-5% - и смотрите что получается. Через пару кварталов все должно стать постепенно лучше...
Но это же сумасшествие! Тул в середине меняет запрос! А как потом разбираться если оно бахнет что-то не то в таблице?! ИМХО - это слишком опасный паттерн, особенно основанный на регулярках!
Кейс выглядит довольно тухло, если это судить в нормальной юрисдикции. Защита через уголовное преследование вообще выглядит предельно странно. Надежда, я так понимаю - что следователь заблокирует деятельность оппонента чисто изъяв технику. Или на технике в результате следственных действий найдется что-то конкретное чтобы доказать факт переработки. Потому что в арбитражном суде вас с формулировкой "Они украли БД потому что интерфейс и объекты учета похожи" - вас пошлют мгновенно, и далеко. Все-таки в арбитраже еще немного головой думают, а не только палки зарабатывают...
Лучше бы в Голдратта почитали. Попытка убирать неэффективность в каждом звене - это много работы с околонулевым результатом. Определяйте ограничение системы - и дальше "барабан-веревка в помощь"...
Уже десять раз говорили: для разнообразия есть такое отделение "морозилка". Сделал еды на неделю - поставь половину в морозилку. Взамен достань на половину недели что-то замороженное до того!... Хочешь еще больше разнообразия - ну морозь две трети в разные контейнеры...
А есть люди, которые каждые пять минут руки моют с мылом. Потому что им все время кажется что они какие-то грязные. В принципе, если кроме этого у пациента других странностей нет - то можно и не лечить. Однако, ставить его привычки в пример нормальным людям - совершенно точно не следует...
А то что в Сибири традиционное блюдо - вареники с картофелем - замораживаются и месяцами хранятся при T<-15C - а потом готовятся путем кипячения в кастрюле (тесто варится, картошка размораживается) - вас никак не смущает ? ИМХО при такой чувствительности к свежести продуктов - надо или дегустатором идти в мишлен (если это объективно такой тонкий вкус), или лечить у врача голову (если нет).
СанПиН надо понимать именно так, как его надо понимать - это охрана общественного здоровья. То есть, предотвращение риска массового отравления при промышленном приготовлении и хранении пищи. И я, разумеется, никоим образом не считаю что в промышленности и торговле можно допускать отступления от норм и правил. Каждый раз когда это происходит - кто-то да травится (вон на прошлой неделе опять в детском лагере!...). Однако, пытаться съесть петрушку за 48 часов когда она может лежать в вашем холодильнике и неделю (может и больше - но есть вы ее скорее всего не заходите ибо невкусно - хоть и ничего с вами не будет) - это уже скорее в разряд повышенной тревожности и сходных с ней психических состояний.
Вы наверное этого себе представить не можете, но раньше холодильников не было - а продукты все-равно хранили. В леднике, в ведре с колодезной водой, а то и просто ямку в земле копали... Тогда конечно отравления случались чаще - но человечество выжило (и боялось голода, а не петрушки и сельдерея перележавшего вторые сутки). После изобретения холодильников все стало сильно веселее, и в своем широком окружении - я вообще не помню в период с середины 1980х случаев отравления домашней едой. В столовых и кафе травились - это было. А под "домашним пищевым отравлением" строго понималось похмелье, а не вот это вот всё...
У больших производителей есть два-четыре раза в месяц производственное совещание, где финансовый менеджмент сношает закупщиков и технологов чтобы те им обеспечили 15-20 процентов маржи несмотря на растущие цены. Технологи ищут способы вбить больше воды в продукт, а закупщики меняют "яйцо куриное" на "пищевкусовую добавку со вкусом 'яичный порошок' ". Потом сношают маркетинг чтобы те придумали такую упаковку и конкурсы чтобы результат все-равно покупался. Потом всех сношает торговая сеть требуя скидку, участие в маркетинговой акции и ретробонус. Единственное в чем вы можете быть более-менее уверены - получившееся гуано (в красочной упаковке "Из мяса молодых бычков") совершенно безопасно для здоровья. Всё остальное в торговой сети и крупном производственном холдинге работает абсолютно против вас...
Вам кто-то мешает 1/2 супа в тот же день заморозить ? Теперь каждый день у вас суп не старше 3 дней с даты изготовления... Уж у супа-то текстура более водянистой точно не станет. А если вы посмотрите на срок хранения стерилизованного супа в консервных банках?... :-)
Вы же понимаете, что СанПиН делается для предприятий-изготовителей и торговли. И сроки там даются с огромным запасом по двум причинам: чтобы при незначительных погрешностях в технологии изготовления не отравить массу людей; и чтобы потребитель (которого мы проконтролировать не можем) смог без последствий поставить несъеденный в ресторане салат в холодильник и съесть его завтра. Если вы верите что петрушка через 48 часов хранения в холодильнике (по СанПиН) становится смертельным ядом - я даже не знаю что сказать... В реальности я видел протоколы закладок на определение срока годности колбасных изделий: это образцы с одной и той же партии ложатся на хранение, и каждый день делается анализ на микробиологию. Как только в худшем образце она вышла за границы нормы (скажем, на 32 день) - от получившего срока отнимается расчетный срок хранения у потребителя, резерв для гарантии безопасности при технологических нарушениях, и, грубо говоря - на упаковке пишется: 20 суток. И для дополнительной гарантии - "...после вскрытия упаковки употребить в течение 48 часов". Хотя еще раз - в тестовой выкладке оно лежало все тридцать два, прежде чем хотя бы теоретически получило возможность вызвать даже не отравление, а легкое пищевое расстройство (справедливости ради - путь от поноса до полноценного пищевого отравления с больничкой это уже очень быстро - бактерии плодятся экспоненциально).
Это я не к тому, что надо жрать все что попало, или доводить продукты в холодильнике чтобы заплесневели, и потом их все-равно есть! Это я к тому что СанПиН пишется не для конечного потребителя...
Страшно то, что она до этой дури не сама додумалась - а ее этому учила семья и школа! И курсы инфоцыган. И "управленческие поединки"... Я не люблю российский бизнес за то, что он как сформировался в 90-е в околобандитской среде - так никогда оттуда и не вышел. Основной способ добывания прибыли - удачно кинуть или прожать контрагента! В период "больших денег" (скажем, после 2006, но до 2014) - начинал образовываться какой-то налет цивилизации. Но с первыми экономическими проблемами - он испарился... А курсы "жосских переговорщиков" продолжают успешно продаваться и покупаться...
Вот то-то у нас почти вся страна ведет себя так, как будто каждая сделка - последняя. Пять копеек сейчас любой ценой! Впрочем, глядя на то, во что превратилось государство и страна - трудно их винить. Хотя - они и до 2022 года были плюс-минус такие же...
Да как вы добиваетесь такого эффекта ?! Мы же не о заморозке до -18 говорим, да? Сколько лет мы ели картофельное пюре из холодильника - оно никогда не слипалось в твердый ком! Ни на молоке, ни на "собственном соку" (спасибо 90-е...). Я вижу только один вариант как это сделать - вбухнуть туда пачку сливочного масла - но так никто никогда не делал... Жареное от охлаждения (+5...+8) не отмокает. Проверялось неоднократно на шашлыках, котлетах и далее по списку! Салат прекрасно хранится в холодильнике несколько дней при условии что вы его не солите и не заправляете сметаной/майонезом. Да и после нового года доедать салаты из холодильника (заправленные!) пару дней (и не готовить вообще!) - как здрасьте! И ни у кого воды в тарелке не наблюдалось, и текстура ни у кого не терялась. То-ли климат у нас в Сибири другой, то-ли продукты, то-ли люди...
И тем не менее, первые договоры об ограничении вооружений между СССР и США проводились именно по этому методу. И таки-да, обе стороны сошлись на том что безопасность жизни на планете для всех (включая их самих) не увеличивается от того что они могут гарантированно взаимно уничтожить друг-друга не один раз, а целых шесть-восемь... Внезапно у двух совершенно противоположных общественно-политических систем нашлись общие интересы!...
Готовить каждый день еду - это только от безделья! Ладно 5 минут свежий салат нарезать... А общественно-необходимые затраты на приготовление еды - это 2-4 часа, только не в день - а в неделю! И это еще худший случай: когда еда готовится на одного человека. Если еда готовится на семью из 3-4 человек, то есть еще положительный эффект масштаба!
Какие два часа срок годности приготовленных продуктов ?! После тепловой обработки - у вас еда в кастрюле считай стерильная. Пока вы первый раз крышку не открыли и туда не залезли руками - она может и день вне холодильника стоять, и ничего ей не будет. Дальше - мы уже сто лет живем после изобретения холодильника. Там еда охлаждается до +5С. Если вы ее положите в контейнер и не будете прятать под одеждой - она будет нагреваться, но за 2 часа пока вы доберетесь до работы - нагреется, ну скажем, до +10+12С в толще продукта. А на работе у вас опять холодильник! В регионах до сих пор работяги носят в ночные смены еду в контейнерах, греют в микроволновках и принимают в комнате приема пищи. И нет кишечных болезней... А смена - это не два часа, и не восемь - а двенадцать!
Ну вот я же выше писал паттерн "catch+log+rethrow"! Это он и есть: поймали внизу иерархии, залогировали (с инфой которая есть в этом месте), и перебросили дальше. :-)
Очень сильно зависит от требований к приложению, ИМХО. Если в конце этих перехватов надо записать лог и показать пользователю "Произошла непредвиденная ошибка. Попробуйте еще раз. Trace-id=..." - то все эти перехваты и перевыбросы другого типа становятся явным излишеством. Поэтому мы перехватывали и перевыбрасывали только там, где были явные требования к error recovery.
Мы в проекте использовали следующее соглашение: методы можно объявлять либо без throws, либо с throws Exception - и больше никак (т.е. никаких IOException, MyCustomException в описаниях нет, и быть не может). Дальше правила жизни:
Если ты вызвал функцию которая throws Exception, но не хочешь/не можешь делать error recovery (99% случаев) - пометь свою функцию throws Excepton, и живи дальше (очень похоже на то, к чему в конце-концов пришел C++).
Если ты хочешь сделать error recovery - то лови только те исключения, которые ты можешь/хочешь обработать именно на этом уровне.
Категорически запрещается ловить и проглатывать произвольное исключение. Разрешается (хотя и не поощряется) подход catch+rethrow - обычно это паттерн catch+log+rethrow. Загромождает логи, но иногда нужно для более быстой локализации проблем.
На верхнем уровне есть обработчик исключений который их логирует, и в зависимости от типа - или терминирует приложение, или поток, или только логирует и надеется что оно как-то само рассосется.
Если ты вызвал throws-функцию из какого-нибудь интересного типа а-ля Runnable - убери руки от клавиатуры, и подумай что ты делаешь! Либо у тебя в твоем Runnable должен быть аналог обработки исключений верхнего уровня (как минимум, залогировать). А как максимум - обсуждать с лидами архитектурную проблему: скорее всего где-то кто-то будет ждать побочный эффект нашего runnalbe, который никогда не наступит. И тут нужна асинхронная обработка ошибок - что есть отдельная песня и отдельный свод правил.
Если делать совсем правильно - то в архитектуре приложения со слоями, каждый слой должен ловить любой Exception который произошел в нижних слоях, и транслировать его в логический эксепшн выраженный в терминах, которыми оперирует именно этот слой. А в качестве "причины" - передавать as-is эксепшн из нижележащего слоя. Например - слой отвечающий за витрину магазина делает запрос в сервис который определяет динамическую цену. Тот лезет, скажем, в базу и получает transaction error. Идеологически правильно будет перехватить этот Transaction Error в сервисе динамической цены и обернуть его в бизнес-эксепшн DynamicPriceNotAvailableException(..., underlyingException). Тогда сервис витрины может хоть как-то сделать recovery из этой ситуации: то ли показать backup статическую цену, то ли пропустить товар, то ли сделать что-то еще. Однако, такие заморочки нужны, ну скажем в 10% случаев когда что-то кидается.
Обязательная оговорка - речь идет о системе не mission-critical класса. Если вы пишете софт для кардиостимулятора или контроллера тормозов - правила относительно исключений и их обработки будут жестче - сильно жестче!
Отказываться от исключений и возвращаться к return value - я считаю нерациональным.
Мы привыкли к тому, что бюджет выполняет ограничивающую функцию. И это в принципе, так. Однако - бюджет может и должен выполнять разрешающую функцию. Если вы занялись бюджетированием не в тот момент когда "поздно пить боржоми" (все свободные деньги уходят на выплаты по кредитам) - у вас есть какой-то свободный денежный поток. И вы можете определить, какую его часть вы собираетесь тратить на всякую фигню. И не испытывать тревоги или угрызений совести пока вы это делаете в рамках бюджета который сами с собой обговорили.
Собственно - отдельное искусство - строить реалистичный бюджет. А то народ прочитает умную книжку про инвестиции, сверстает заведомо неисполнимый бюджет - потом его не исполнит, прийдет к выводу "бюджет не работает", и соскочит... Первые бюджеты вообще надо составлять по историческому факту - если вы в предыдущие месяцы/недели/годы тратили X на статью расходов Y, то это значит что и в этом месяце вы скорее всего сделаете то же самое. А дальше уже смотрите, какие расходы у вас растут - и с этим ничего не поделать, а где есть пространство для маневра. И нет, практически бессмысленно срезать расходы на 50-70%: получается нереалистично и unsustainable. Срезайте по 1-3-5% - и смотрите что получается. Через пару кварталов все должно стать постепенно лучше...
Но это же сумасшествие! Тул в середине меняет запрос! А как потом разбираться если оно бахнет что-то не то в таблице?! ИМХО - это слишком опасный паттерн, особенно основанный на регулярках!
Кейс выглядит довольно тухло, если это судить в нормальной юрисдикции. Защита через уголовное преследование вообще выглядит предельно странно. Надежда, я так понимаю - что следователь заблокирует деятельность оппонента чисто изъяв технику. Или на технике в результате следственных действий найдется что-то конкретное чтобы доказать факт переработки. Потому что в арбитражном суде вас с формулировкой "Они украли БД потому что интерфейс и объекты учета похожи" - вас пошлют мгновенно, и далеко. Все-таки в арбитраже еще немного головой думают, а не только палки зарабатывают...