• Как правильно реализовать бронь товара до оплаты в интернет магазине цифровых товаров?

    vitaly_74
    @vitaly_74
    что касается относительно ботов - ответил hint000 , что касаемо брони, у вас например в бд есть таблица покупок, так создайте подобную но для брони, и покупки проводите, проверяя наличие минус суммарный бронь по товару (для мгновенных покупателей), или по броню, для тех кто забронировал, в таблице также поставьте дату окончания брони (начало не важно как мне кажется), и запускайте крон, для проверки брони. если время брони истекло, обнуляеете. не истекло, оставляете.
    Ответ написан
    3 комментария
  • Как создать объект для класса через функцию def?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Созданный экземпляр класса надо вернуть из функции при помощи return. А результат выполнения такой функции присвоить нужной вам переменной.
    spoiler
    Есть вариант через глобальные переменные, но это вообще зашквар и лучше так никогда не делать.
    Ответ написан
  • Как правильно оформить несколько разных, но с одинаковым функционалом проектов?

    Тоже за то чтобы иметь два раздельных репозитория - хоть они и делают одно и то же, но продукты всё-таки разные.
    Да и CI/CD, если таковой будет, сделать будет легче.
    И контрибуторам будет легче вкатиться - не все же знают одновременно и js и php.

    Документацию действительно можно вынести в отдельную репу/сайт (сам бы так и сделал)

    Как пример проекта, который сделан по такой логике - playwright.
    API одинаковый, документация одна, вендор один, но реализован на Java, Python, C#, JS, и каждая реализация в своём репозитории.

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

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    До 15 точек можно полным перебором сделать. Вам надо перебрать все разбиения 3n точек на тройки. Таких разбиений (3n)!/(3!)^n/n! для n=5 - это чуть больше миллиона.

    Вы у себя перебираете все треугольники, даже если они имеют общие точки, это сильно раздувает количество вариантов.

    Перебирать можно рекурсивно - берите первую точку без треугольника и пребирайте 2 оставшиеся, которые будут образовывать с ней треугольник. Помечайте их в треугольник и рекурсивно запускайтесь дальше. Потом откатывайте последние изменения и перебирайте другие варианты. Дальше надо проверить, что никакие 2 теругольника не пересекаются и не лежат друг в друге. Если это еще и делать по мере генерации, то можно неплохо ускорить решение за счет отсечения заведомо невозможных ваниантов. Может даже до 21 одной точки будет работать терпимо по скорости.

    Какое-то геометрическое решение в голову что-то не приходит.
    Ответ написан
    Комментировать
  • Как сделать IN если возможные значения записаны строкой?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В ужасе выкинуть таблицу, в которой поле может иметь вид 1,2,3,5,15 и потом еще полчаса тошнить в унитаз от омерзения.
    Купить букварь по базам данных
    Прочитать в нем такое слово как "реляционная база данных"
    Сделать нормальную таблицу, в которой 1,2,3,5,15 будет не в одной строке, а в ПЯТИ
    Дальше всё как и было
    Ответ написан
    6 комментариев
  • Войти в геймдев или фронтедн?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    сть ли профессии в разработке игр, в которые можно войти на минимальном уровне с количеством усилий, аналогичным входу во фронтдэнд на минимальном уровне

    тестирование. И там можно писать код, да
    Ответ написан
    6 комментариев
  • Что происходит с током в момент замыкания цепи?

    gbg
    @gbg Куратор тега Электроника
    Любые ответы на любые вопросы
    Это слишком большая кроличья нора для того, чтобы в нее просто так погружаться.

    1. Нужно различать реально существующую цепь и ее математическую модель. В реально существующей цепи нет идеальных резисторов и проводов - у резистора будет, например, паразитная индуктивность, ключ, который мы замыкаем в начале эксперимента, будет замыкаться не сразу, а давать дребезг в виде нескольких импульсов тока и так далее.

    Но влияние всех этих эффектов либо чрезвычайно кратковременно, либо мало по величине - поэтому его не учитывают.

    Начертив схему только из резисторов и ключа, вы сразу делаете предположения, что резисторы идеальны (не имеют паразитной индуктивности), что вся конструкция идеальна (нет так называемой "емкости" монтажа), что ключ включается моментально, и переходного процесса просто нет.

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

    Почему у резисторов суммируются сопротивления - если коротко, то потому, что на основании проведенных учеными наблюдений установлено (Георгом Омом в частности), что вещества ведут себя вот так вот. Для электротехнических расчетов нет большого смысла углубляться в молекулярную физику происходящего, но если очень хочется:

    можно представить себе резистор как трамай РВЗ-6, у которого одна дверь в начале кузова и одна дверь в конце. Носителям заряда очень сильно нужно пробежать трамвай строго от одной двери до другой (в тиктоке новый челлендж). Количество носителей заряда, пробежавших через трамвай в единицу времени - это прямо по определению сила тока в цепи - прямо пропорционально свойству "забитость трамвая пассажирами" - чем больше пассажиров, тем меньше бегунов-зарядов в единицу времени может через себя пропустить трамвай. Таким образом, ставя подряд несколько трамваев и проводя челлендж, можно установить закон скорости пробегания тиктокеров через трамфай, который будет по форме идентичен закону Ома.

    Более того, трамвайная модель также позволяет попутно воспроизвести закон Джоуля-Ленца - пихающиеся тиктокеры будут все больше бесить публику в трамвае - вырабатывая хейт (а резистор вырабатывает тепло - heat). И при большом потоке тиктокеров трамвай взбесится (а резистор - перегорит)
    Ответ написан
    1 комментарий
  • Аналог Software Center для linux?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Без проблем - делаете собственный репозитарий пакетов. Прописывается его настройках на машинах пользователей (/etc/apt, /etc/yum и так далее), и вуаля!
    Ну, пользователям еще доверяете ставить и обновлять пакеты.
    Делается практически в любом современном дистрибутиве, что на основе debian, что на основе rhel.
    Причем, сам так и делаю, ибо около 300 пользователй под линуксами.
    Ответ написан
    4 комментария
  • Какой оптимальный алгоритм для однозначного определения слагаемых в сумме?

    @rPman
    Если представить стоимость отдельного заказа (в копейках) в 2-ричной системе счисления (набор бит) и каждый заказ должен устанавливать только свой бит (брать младшие биты, установив остальные в 0), то сумма этих чисел в младших разрядах будет аналогично битовой операции OR, т.е. по итоговой сумме можно будет однозначно понять, какой заказ был включен в нее.

    После получения платежки мы получим в сумме в младших битах те заказы - что оплачены, и для последующих заказов берем эти освободившиеся битовые позиции.

    Пример, берем младшие 4 бита для адреса (возможность одновременно быть в обработке 4-ем заказам)
    1 - 10110001 цена 177р
    2 - 01100010 цена 98р
    3 - 11110100 цена 244р
    4 - 00011000 цена 24р
    если платежка пришла по 3-ем заказам, например 1+2+4 то это даст сумму 299р - 100101011, смотрим на младшие биты, установлены 1,2 и 4


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

    Логично что это подойдет только если заказов мало, например 2^10 это всего 10.24р

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

    @res2001
    Developer, ex-admin
    Просто размышление.
    Логика подсказывает, что такой подход применяется, когда нужно не просто обойти все дерево как-нибудь, а обойти в порядке сортировки дерева (или в обратном порядке).

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

    На каком именно этапе проверять родителя в таком случае зависит от того как сортируются потомки относительно родителя в данном конкретном случае. Т.е. в бинарном дереве левый потомок меньше родителя, а правый больше - это правило и создает упорядоченность при обходе. Если узлов больше 2, то нужно определить аналогичное правило упорядоченности для потомков относительно родителя. в соответствии с этим правилом и совершать обход.
    Ответ написан
    1 комментарий
  • Имиграция профилей между доменами?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Никак - потому что миграция из несуществующего места невозможна.
    И странно слышать вопрос после заявления-что это была тестовая среда. Оказывается - у вас там пользователи.
    Ответ написан
    2 комментария
  • Может ли Service иметь репозитории других классов?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Могу ли я прямо обратиться к репозиторию Entity A из Service B?

    Да, можно. Другой вопрос - хорошо ли.

    Или мне надо это делать вот так Service B -> Service A -> Repository A?

    Я предпочитаю этот способ.
    Причина следующая:
    Вот, представьте, что на сервисном уровне вы получаете Optional<T> из репозитория и в случае, если объект не найден, то на сервисном уровне выбрасываете исключение orElseThrow(). Ну а далее ExceptionHandler ловит исключение и отдает соответствующий код ошибки и сообщение на фронт.
    Если вы решите из сервиса А обратиться в репозиторий Б, то по факту вам нужно заново получить объект и выбросить исключение в случае, если он не найден, а это уже дублирование кода...
    Псевдокод:
    ServiceA {
    @Autowired
    RepoB repoB;
    @Autowired
    ServiceB serviceB;
    
    // 1 вариант
    List<Job> doSomeJob1(String email){
    User user =  repoB.findUserByEmail(email).orElseThrow(UserNotFoundException::new);
    return user.getJobs();
    }
    
    // 2 вариант
    List<Job> doSomeJob2(String email) {
    User user = serviceB.getUserByEmail(email);
    return user.getJobs();
    }
    
    RepoB {
    Optional<User> findUserByEmail(String email);
    }
    
    ServiceB {
    @Autowired
    RepoB repoB;
    
    User getUserByEmail(String email){
    return repoB.findUserByEmail(email).orElseThrow(UserNotFoundException::new);
    }
    
    }


    Во втором варианте нам не пришлось писать логику и выбрасывать исключение.
    А так многое зависит от проекта, от того, как принято в команде работать и т.д.

    Проблема в том, что у меня все сервисы DTOшки, а для работы Service B нужны нормальные объекты, что делать в таком случае? Неужели создавать отдельные точно такие же методы просто без конверта в дто?

    Я это обычно, делаю по другому. Я возвращаю объекты из сервисов. А если мне нужно DTO, то есть отдельный сервис MapperService, который принимимает дженерик и возвращает соответствующие DTO.
    Ответ написан
    4 комментария
  • Стоит ли покупать компьютер с aliexpress?

    @spaceatmoon
    Сборка мусор. Не покупайте никогда ничего "из простого на время" если нет денег. Так вы хотя бы сэкономите. Про серверные процессы вообще забудьте, у них другая категория задач.

    Рекомендую следующую сборку которой вам хватит на 3 года и от которой у вас не будет гореть.
    1. Заменяем hdd на ssd. По деньгам одно и тоже, но профит в 500%.
    SSD 500GB за 3.7к рублей
    2. Лучше DDR4.
    3.5к за 8ГБ
    2.6к за 8ГБ чуть хуже, но вы не заметите
    Итого за 6к вы возьмете 16GB. Этого хватит ещё на долго.
    3. Материнку любую в пределах 6к берёте, но не самую галимую.
    4. Процессор берите со встроенным графическим процессором. Профит будет такой же как и от GTX 1060 3GB (да, она плоха).
    Рекомендую AMD Ryzen 3 PRO 3200G или типа того, можешь пошарить. Intel не бери, у них малый ресурс по задачам, любая задача превращается в 100% утилизацию процессора, а это проблемы с охлаждением. Итого 14к на процессор. На нём никогда не экономь. Ведь к примеру видеокарта несмотря на свою стоимость в 90% случаев тупо простаивает, а стоит она больше всех.

    Считаем - 6 + 6 + 6 + 14 = 32 тысячи рублей. При этом сборка будет современна, радовать глаз и есть возможность её усовершенствовать, а хлам с алика ты выбросишь после полугода.
    Ответ написан
  • Вёрстка - фронтенд или бекенд?

    Пользователь никогда не видит код, а рисованием занимается браузер, а не разработчик.

    По тому html, css, js и прочее, что запускается на машине пользователя, называют фронтендом.
    А то что исполняется на сервере - бэкендом.
    Ответ написан
  • Нормально ли кидать эксепшены в Spring boot web app?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый вечер.
    Да, нормально.
    Само исключение (лог) не нужно отдавать на фронт.
    На фронт отдайте код http ошибки (4хх) и какое-нибудь кастомное сообщение: "Недостаточно средств".
    Посмотрите в сторону ExceptionHandler.
    Ответ написан
    Комментировать
  • Нормально ли кидать эксепшены в Spring boot web app?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Нормально.
    Ответ написан
    Комментировать
  • Что известно посредникам при использовании HTTPS?

    gbg
    @gbg Куратор тега Компьютерные сети
    Любые ответы на любые вопросы
    Факт захода куда-то в гугл определить можно, содержимое запроса - нет.
    Ответ написан
    1 комментарий
  • Как открыть иной файл в java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Ответ на ваш вопрос:
    https://stackoverflow.com/questions/10685893/run-e...
    Ответ написан
    Комментировать
  • Как заменить строку на цифры у оператора IN?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Цифры тут как раз совершенно не обязательны, а вот знаков вопроса должно быть больше. На каждый айди.
    ПХП не джинн из бутылки, чтобы отгадывать, что тут имелось в виду - целиком строка или отдельные значения.
    Если нужны отдельные значения, то и передавать их надо по отдельности, n'est pas?

    Это конечно не так красиво выглядит, но других вариантов все равно нет

    $array = [8,10,11]; 
    $in  = str_repeat('?,', count($array) - 1) . '?';
    $sql = "SELECT * FROM users WHERE id NOT IN ($in)";
    $stmt  = $db->prepare($sql);
    $stmt->execute($array);
    Ответ написан
    5 комментариев
  • Как правильно составить JSON массив?

    GavriKos
    @GavriKos
    Массив в данном случае сильно хуже по тем же причинам что вы описали. Добавится 10 параметров - и хер поймешь какой что значит. + это не обеспечивает уникальность, затрудняет поиск (полный перебор если напрямую в массивы парсить а не в словарь/ассоциативный массив/карту).

    Решение в ТЗ тоже не найс (проблемы с расширением, да), но и ваше не лучше.
    Мой вариант который хотя бы ближе к ТЗ:
    {
    "items": {
       1234: {
          "count":1
       }
    }
    }


    Если очень не хочется делать GUID ключем (хотя непонятно почему - он то уникален) - то можно так:
    {
    "items": [
       {
          "guid":1234,
          "count":1
       }
    ]
    }
    Ответ написан
    1 комментарий