• Почему нельзя/можно писать бизнес-логику в sql?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Когда в руках молоток, все вокруг становится похожим на гвоздь... Если вы хорошо разбираетесь в языках запросов, это не говорит о том что это распространенный навык.
    Самый простой аргумент - посмотрите на рынок, много ли движков, построенных на бд/sql?
    Много ли специалистов по бд вообще на рынке труда?
    Кто из них разрабатывал логику на стороне бд?
    Кроме того, слои яп-бд можно разнести на разные инстансы, что сильно распределит нагрузку, а бд сама по себе умеет в пожрать ресурсы...

    Можно долго перечислять плюсы и минусы. Смысл в том что если вы будете разрабатывать это сами или для себя и вы уверены в собственной способности построить всю логику на одной технологии- флаг в руки, это будет оригинальным решением, вполне возможно даже что найдутся ценители.
    Если же проект для заказчика, и в разработке будут участвовать 2+ людей, то тут то вы хапнете проблем большой ложкой. Найти спецов которые прям пишут логику на скуеле, чтобы они стоили приемлемых денег, завтра не ушли в другой проект так как тут надо делать кучу непрофильных дел: как-то делить задачи, вести версионирование, не пересекаться с другими задачами функционалом... проще пойти в нормальную контору, где от дбшника требуют только структуру, пару триггеров и он там один отвечает за бд, так как больше не нужно и ни с кем из коллег не надо 10 раз утверждать изменения в структуре/процедурах/етц. Короче это не специфично и мало кто захочет все это изучать с новой стороны. Про поддержку такого чуда я вообще молчу.

    Это еще не учитывая того что в проекте все равно понадобится пара программистов на каком-то ЯП, для формирования отображения и какой-то прослойки между пользователем и бд, которые должны будут разобраться с этим зоопарком наоборот.
    Ответ написан
    4 комментария
  • Как сделать автоматический деплой веб-сервиса на поддомен?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если нормально сформулировать вопрос, то речь идет о банальном деплое
    И автору бы сначала поучиться разворачивать свое единственное приложение, а потом уже начинать мечтать про междупланетный шахматный центр на тыщу инстансов.

    При том что задача в общем случае решается элементарно. Добавлением еще одной секции в плейбук того же Ansible. Что даст автору ту самую заветную "одну кнопку". А точнее две - развернуть новый инстанс и обновить все существующие.

    А если еще внимательнее посмотреть на проблему, то возникает закономерный вопрос - а зачем автору вообще миллион виртуальных хостов, если речь идет о банальных поддоменах? Которые прекрасно реализуются в рамках единственного виртуального хоста. То есть можно либо добавить поддержку субдомена в текущее приложение, либо, на худой конец, сделать multi-tenant приложение, где у каждого поддомена будет своя БД.
    При этом вся кнопка будет заключаться в добавлении имени субдомена в базу данных
    Ответ написан
    3 комментария
  • Почему удаляет аккаунт телеграмм на python telethon?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Скорее всего вы применяете клиентское API телеграма не по назначению или вопреки лицензии. Например, вы, может быть, рассылаете спам, или скам, а может быть делаете что-то ещё, что противоречит добросовестному использованию сети.
    Конкретной причины, по которой вас блокируют вам никто скорее всего не скажет. В таких случаях самое эффективное - это максимальнео расплывчато описывать причины и критерии возможных блокировок, чтобы играясь с пороговыми критериями злоумышленники не могли подстроиться под ограничения.

    Скорее всего ограничения и критерии, по которым вашу деятельность пресекают, не заключаются в чем-то одном. Скорее всего критериев много и они не однозначно влияют на принятие решения о блокировке. Другими словами, если быть по ту сторону баррикад от вас, то причины блокировок нужно сделать максимально многофакторными, диверсифицированными, неявными и нечеткими. Где-то нужно даже вводить рандомизацию и отложенную блокировку, если вы предпринимаете серьёзные меры, чтобы ваш софт притворялся валидным штатным клиентом. В вашем же случае, видимо, паттерн использования протокола и АПИ выдаёт вас мгновенно.

    Подумайте чем ваш "клиент" телеграма отличается от добросовестно выполненного клиента для штатных целей? Может быть он не сохраняет контактов? Может быть коннекты идут из одной подсети и она уже "на особом счету"? Может быть На ваши сообщения много жаловались, и теперь отдельные специальные эвристики вылавливают клиентов, похожих по паттерну на ваши и банят их сразу же?

    Никто вам не скажет конкретных критериев. Никто не допустит, чтобы эти критерии были всегда неизменными и четкими. Это не эффективно для борьбы со спамерами.
    Ответ написан
    3 комментария
  • Composer как сгенерировать composer.json с заранее выбранными пакетами?

    У команды init достаточно большой перечень опций, так что можно в саму команду прописать все дефолтные значения, и каждый последующий проект инициализировать ею:
    composer init --name='gordinskiy/new_package' \
        --description='Project description' \
        --type='library' \
        --author='Dmitriy Gordinskiy' \
        --license='MIT' \
        --require='php:>=8.2' \
        --require='webmozart/assert:^1.11' \
        --require-dev='phpunit/phpunit:^10.3' \
        --require-dev='vimeo/psalm:^5.11' \
        --require-dev='phpstan/phpstan:^1.10'
    Ответ написан
    Комментировать
  • Как обойти запрет на ip из России при docker build elasticsearch?

    akelsey
    @akelsey
    Забрать с https://hub.docker.com который не банит пока:
    docker pull elasticsearch:8.7.1
    Ответ написан
    Комментировать
  • Как выбрать базу данных для проекта?

    vabka
    @vabka
    Токсичный шарпист
    Если не знаешь, почему тебе нужна нереляционная - бери реляционную, тк наиболее гибкое и какие-то возможные проблемы будет легче всего обойти.

    Какую конкретно? Ту, которую лучше знаешь, если не можешь назвать конкретную причину, почему лучше изучить другую и взять другую. Например вот я беру postgres по-умолчанию, но вот у меня проект, который требует минимального жора ресурсов и наиболее простой инфраструктуры - тогда беру sqlite.
    Или наоборот - я понимаю, что у меня какие-то специфичные требования по консистентности и доступности, система у меня будет распределённая, а запросы у меня будут исключительно key-value, да и желательно ещё иметь возможность подписки на изменения каких-то ключей - тогда беру etcd.
    Ответ написан
    Комментировать
  • Почему не выпускают процессоры на архитектуре виртуальной машины Java?

    vabka
    @vabka
    Токсичный шарпист
    1. А сборщик мусора и всё Java API тоже на уровне железа будешь реализовывать?
    2. Что будешь делать, когда выйдет новая версия Java? Отказываться от нового софта? Отказываться от старого софта и переходить на новый железный процессор?
    3. Что будешь делать со всем тем ПО, которое не для JVM создано?
    4. Уверен ли ты, что сможешь создать аппаратную реализацию java-машины, которая будет эффективнее, чем классический процессор и JIT?
    Ответ написан
    6 комментариев
  • Какая space complexity у данного алгоритма?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Не спрашивайте у чатжпт ничего, в чем не являетесь полным экспертом. Он почти в половине случаев выдает очень правдоподобный бред.

    У этого алгоритма действительно пространственная сложность O(N) (если N - размер входного массива). Однако, можно натянуть сову на глобус, если отдельно считать входные и выходные данные (которых O(N)). Тогда можно сказать, что алгоритм использует O(1) дополнительно пространства. Входные и выходные данные все равно понадобятся, поэтому иногда их не считают.

    У меня нет доступа к этому видео. Если они там говорят "additional space is O(1)", то это именно так, как я описал выше.
    Ответ написан
    1 комментарий
  • Как записать base64 в таблицу?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    1) Хранить картинки в бд крайне кривое решение. Это может быть оправдано только в случае когда там хранится пара иконок, вставленная в текст прям через <имг срц="тут_бэйз64_строка"... и нет желания все это переделывать ради 2 кастомных микрокартинок. В остальном - конвертировать в картинку и хранить на диске. В бд писать путь до картинки. Если это какой-то аватар или картинка, связанная с другим объектом, соответственно заводить отдельную таблицу на картинки и связь один-к-одному или один-ко-многим, в зависимости от ситуации. В худшем случае поле в той же таблице, если точно будете знать что других картинок к объекту относиться не будет, но это должен быть путь до реальной картинки на диске.
    2) Почему хранение в бд - плохая идея: При каждом запросе у вас будет вытаскиваться пару мегабайт данных из бд, передаваться по каналу соединения с бд, помещаться в память, и после этого еще нужно программно отдавать картину, кроме прочего картинка в бэйс64 занимает примерно на 30% больше места.
    Когда у вас есть картинка на диске, вы просто вставляете путь до нее, это ~50 символов, и сервер отдает ее БЕЗ УЧАСТИЯ ПРОГРАММНОЙ ЧАСТИ, средствами вебсервера и ОС. Это быстрее, потребляет меньше памяти и занимает меньше места в хранилище.
    Ответ написан
    Комментировать
  • Актуальность данных при кэшировании, решается ли?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    «There are only two hard things in Computer Science: cache invalidation and naming things» — Phil Karlton

    Насколько я понял проблему, кэш проблемных данных нужно хранить в отдельном ключе редиса, по которому его легко найти и инвалидировать из разных мест.
    Ответ написан
    Комментировать
  • Какой хостинг выбрать для ТГ бота на .Net?

    Adler_lug
    @Adler_lug
    Любой самый дешевый vds с каким нибудь линуксом, на который ставится .Net (ubuntu, debian и т.д.). И бота собираете под Linux.
    Ответ написан
    Комментировать
  • Как сохранить другую сущность при авторизации?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Подскажите пожалуйста как сохранить модель Doctors как авторизованного пользователя?

    1) Модели не называются во множественном числе. Модель Doctor привязывается к таблице doctors. И "я получаю модель Users," - то же самое, модель User.
    2) Доктор или пациент это не пользователь, это либо роль, и тогда надо делать RBAC, либо авторизированная сущность, и тогда нужно связывать юзера и сущность через один-к-одному, в случае если доктор и пациент кардинально различаются по свойствам, а не просто имеют разные права. А пользователь просто способ авторизации/идентификации.
    Ответ написан
    Комментировать
  • Macbook air как рабочий ноут для системного администратора?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Мне кажется тут ноут с виндой без вариантов.
    Ответ написан
    Комментировать
  • Какой приоритет у оператора => определения элемента массива?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Приоритета нет, поскольку это не оператор, а языковая конструкция key => value.
    Каждый из элементов конструкции вычисляется отдельно.
    Ответ написан
  • Возможно ли отправить в бд через sql запрос в формате BLOB, heic изображения?

    @aleksejjjjj
    Самое отвратительное из известных решений. В БД храним путь к файлу и любые мета данные. Файл лежит в файловой системе. Там его и конвертируем в любой удобный формат и разрешение. Никаких полумер. Картинкам в БД не место.
    Ответ написан
    3 комментария
  • Как создать свою доменную зону?

    NeiroNx
    @NeiroNx
    Программист
    Корневые зоны очень дорого стоят. И просто так их вам никто не зарегистрирует.
    То что вы написали звучит как "Хочу собственную страну".

    Вообще для своей организации можно внутри какой хочешь домен завести - хоть сколько зон. Проблеммы начнутся когда вы захотите чтобы о вашей зоне узнали другие - вот тут придется оплачивать.
    Ответ написан
    1 комментарий
  • Как борются с взломом нейросетей?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Существует только один способ улучшать работу нейросетей - продолжить обучение на новых данных.

    Сам термин взлом здесь не применим. НС оперируют нечеткой логикой поэтому никакого взлома
    нет. Есть просто детерминированное поведение выхода в зависимости от входа.
    Ответ написан
    Комментировать
  • Как хранить товары с различными опциями в БД?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В стародавние времена это действительно было проблемой.

    И обычно использовался п.2, который называется EAV, и который в нормальном виде (таблица всех атрибутов, таблица всех значений, и таблица-связка товар-атрибут-значение), хотя и является истинно реляционным решением, служил причиной кровавых слез не одного поколения программистов.

    Эта ситуация послужила одной из причин появления хранилищ для неструктурированных данных, таких как Монго, которые входят в очень широкую категорию NoSQL.
    Но сами по себе "документо-ориентированные базы данных" в качестве основного хранилища - это ад и проклятие, хуже EAV. Если EAV делает адом только работу с атрибутами товаров, то Монга делает проклятием работу со всей БД целиком. Забудьте об этой идее.

    Тем более что в последние годы появилось вполне достойное решение: во всех классических СУБД появилась поддержка JSON полей.
    То есть таблица товаров будет самая обычная, в которой есть общие поля типа цены, названия и прочее. А свойства хранятся в JSON поле. Беря, таким образом, лучшее из двух миров.

    На начальном этапе вы даже сможете делать поиск по атрибутам, используя нативные JSON функции. Но в дальнейшем поиск товаров, а так же фильтрацию по атрибутам на странице категории (так называемый "фасетный поиск") надо будет возложить на специальный поисковый движок (который тоже входит в широкую категорию "NoSQL", хотя ничего общего с документными БД не имеет, и БД, собственно, не является), такой как Эластик или Мантикора.

    Главное при этом хранить (либо в коде, либо в таблице категорий) эталонные структуры таких json полей, которые, во-первых, использовать как справочники для заполнения товаров (тупо чтобы помнить, что частота процессора называется freq, а не frequency), и чтобы собственно делать фасетные фильтры.
    Ответ написан
    5 комментариев
  • Как исправить ошибку при пуше в Git хостинга error remote amvera already exists?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    remote amvera already exists

    Вы пытаетесь добавить remote с именем amvera,
    git remote add amvera https://git.amvera.ru/<имя-пользователя>/<транслитерированное-имя-проекта>
    Если вам пишет, что такой remote уже существует, значит вы ранее уже это сделали.
    Зачем вы пытаетесь добавить адрес повторно?

    Подскажите, что с этим можно сделать?

    Если вы хотите заменить ранее добавленный адрес, то либо предварительно удалите предыдущий remote
    git remote remove amvera
    либо используйте команду замены
    git remote set-url amvera ...
    Ответ написан
    Комментировать
  • Как достучаться до докер контейнера из браузера?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Потому что стучаться надо не на локалхост, а по имени контейнера.
    Ответ написан
    Комментировать