• Что и как изучать после React и Express?

    Grapeoff
    @Grapeoff
    В чём концепция...?
    Разбираюсь в HTML, css (css, sass), js (nodejs, express, react), npm, npx, jwt, mongodb.

    Не разбираетесь. Если вы немного поработали со всем этим, это не значит, что вы реально в этом шарите.

    Окей, я не буду ничего говорить про Front-End, это за гранью моей компетенции, но вот о Express и Mongo я бы поговорил.

    Express - старый, низкоуровневый фреймворк. Большинство ваших проектов на нём, это, скорее всего "большой ком грязи". И если вы просто создали отдельные папочки для моделей и контроллеров, это не значит, что вы создали расширяемое приложение с чистой архитектурой. Не увидел в списке ваших умений TypeScript, и если на фронтенде без TS ещё обходятся, то на бекенде это полнейший позор.

    MongoDB - уж поверьте, вы ещё много чего интересного узнаете. MongoDB не заканчивается на yarn add mongoose и model.find().populate('field').

    Совет №1: Изучайте углублённо старое. Новое, конечно, хорошо, но вы для начала попробуйте сделать что-то сложное, что вы никогда не делали ранее на том стеке, который у вас сейчас есть. А там уже и необходимость в чём-то новом появится (например: нечёткий поиск по бд). Да и на Express NodeJS-бекенд не кончается. С NGINX разберётесь, когда всё это задеплоете на реальный VPS, а пока что подождёт.

    Совет №2: Учите архитектуру ПО. До некоторых принципов от туда нужно дорасти, возможно, многое поначалу будет непонятно. Но когда дорастёте, то уверяю вас, никогда не пожалеете, что решили в этом разобраться.
    Ответ написан
    Комментировать
  • Какую БД выбрать для парсинга на питоне и использовании в app на котлине?

    @rPman
    sqlite
    считай это отраслевой стандарт идеальный для мобильных пользователей

    правильно конечно нужно продумать что именно будет происходить с данными, но как я понимаю - они только на чтение, то sqlite идеальный вариант по всем параметрам
    Ответ написан
  • Spring как отправить JSON строку?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    А вы js код откуда-то скопировали или как?
    1) Сама идея возврата json из контроллера в таком виде - не очень. Вам необходимо вернуть dto. А jackson уже сам сериализует в json
    @GetMapping("/json")
      public String getJSON2() {
        return "{ \"id\": 10, \"name\": \"Clementina DuBuque\", \"username\": \"Moriah.Stanton\","
            + " \"email\": \"Rey.Padberg@karina.biz\", "
            + "\"address\": { \"street\": \"Kattie Turnpike\", "
            + "\"suite\": \"Suite 198\", \"city\": \"Lebsackbury\", "
            + "\"zipcode\": \"31428-2261\", \"geo\": { \"lat\": "
            + "\"-38.2386\", \"lng\": \"57.2232\" } }";
      }


    2) Как отметил коллега Dmitry Roo у вас то, что происходит в браузере и то что происходит в js коде - это разные вещи.
    Вот, смотрите:
    В коде ниже вы совершаете GET запрос на /api/json.
    Во-первых, непонятно, что это: data: { command: "GetDriverInfo" },, а главное зачем и как она должна быть обработана контроллером.
    Во-вторых, непонятно какой параметр вы хотите получить:
    console.log(response.driverVer);, если такого параметра driveVer у вас нет в json.
    Ответ написан
    Комментировать
  • Как переписать подключение к базе данных, по принципам ООП?

    Dier_Sergio_Great
    @Dier_Sergio_Great
    Увлеченный человек
    Хороший код это когда его легко читать, понимать, и легко его продолжать писать.
    В связи с огромными проектами программ, где количество кода не способен воспринять 1 человек. Были придуманы разные подходы. Самый популярный подход это ООП.
    ООП служит для легкости восприятия кода одним человек!
    Который не знает всей картины кода, но с легкостью может писать код своей задачи не нарушая читаемость, переносимость и прочее.
    В разных задачах похожие объекты могут быть разными по подходу ООП.
    Поэтому лучше всего изучать с использования готовых фреймворков и CMS.
    В CMS Joomla, Вы как бы создавая расширение, просто описываете объект по аналогии с имеющиемся, попутно Вы увидите узлы, элементы, слои кода.
    Быть может Вы уже наверно слышали подход MVC. Это тоже абстрактная сущность, обобщающая принципы.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак.
    Это не стёб и не троллинг. Это единственный возможный ответ на этот хороший, в сущности, вопрос.

    ООП - это не картина, которую купил и на стенку повесил, для красоты.
    Это инструмент для решения какой-либо задачи.
    Если задачи нет, то и ООП применять не следует.

    в данном случае перед ООП надо выучить куда более базовые вещи.
    Например научиться применять готовые классы, такие как mysqli
    узнать почему за использование @ программистам в аду льют кипяток на самые нежные части тела
    выучить что exit('Ошибка подключения'); - это говнокод
    ну и открыть для себя разделение логики работы с данными и логики отображения. То есть сначала получить все данные, а потом только выводить.

    Эту страницу можно переписать в соответствии с принципами аккуратного кода

    Сначала сделать файл config.php.
    Этот файл можно будет исключить из системы контроля версий и таким образом иметь на каждом сервере свой

    <?php
    return [
        'db' => [
            'host' => '127.0.0.1',
            'port' => 3306,
            'db'   => 'pizza',
            'user' => 'root',
            'pass' => '',
            'charset' => 'utf8mb4',
        ]
    ];

    потом сделать файл mysqli.php
    Этот файл можно будет включать во все скрипты, которым нужно соединение с БД
    <?php
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $db = new mysqli(
        $config['db']['host'], 
        $config['db']['user'], 
        $config['db']['pass'], 
        $config['db']['db'], 
        $config['db']['port']
    );
    $db->set_charset($config['db']['charset']);
    $db->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);


    Потом сделать страницу pizza.tpl.php в которую поместить весь HTML
    .
                <select id="single" class="form-control" name = '1234' >
                    <option value="" disabled selected style='display:none;'>выберите тип</option>
                    <?php foreach($types as $object): ?>
                        <option value ="<?=$object['id']?>"><?=$object['name']?></option>
                     <?php endforeach ?>
                </select>


    И потом сделать страницу pizza.php на которой собрать это всё вместе
    <?php
    $config = require 'config.php';
    require 'mysqli.php';
    
    $sql="SELECT * FROM pizza";
    $types=$db->query($sql)->fetch_all(MYSQLI_ASSOC);
    
    include 'pizza.tpl.php';


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

    saboteur_kiev
    @saboteur_kiev
    software engineer
    1. API
    2. Сервера могут общаться через базу данных
    3. Сервера могут общаться через брокер очередей
    4. Можно подумать насчет общего стораджа - S3, распределенная файловая система, просто сетевой диск замапленный на каждый сервер.

    Вопрос не в том, чтобы "как связать", вопрос зачем вам это надо, как вы себе представляете "связывание" и какая у него цель?
    Ответ написан
    1 комментарий
  • Почему если в SELECT * добавить COUNT() покажет одну строку?

    bingo347
    @bingo347
    Crazy on performance...
    Потому что COUNT() - это агрегатная функция.
    Делайте группировку по какому либо столбцу, и строк в результате будет ровно столько, сколько уникальных значений в данном столбце, и подсчет COUNT будет по этим значениям. Без группировки подсчет будет по всей выборке.
    Либо делайте отдельными запросами вывод строк и подсчет.
    Ответ написан
    2 комментария
  • Как сделать cherry pick?

    @lucky4 Автор вопроса
    Извиняюсь, нашел ошибку.
    Я дурак, когда создавал новую ветку - я создавал с прошлой ветки... По этому она и не хочет применять на себя "новые" коммиты.

    Надеюсь, кто-то когда-то зайдет и найдет себя)
    Ответ написан
    Комментировать
  • Какой алгоритм оптимизации выбрать?

    @dmshar
    Не пойму.
    Вы курс оптимизации изучаете и вам надо сделать такое задание? Тогда вам должны были рассказать о преимуществах и недостатках каждого метода. Примените эти знания, что вам мешает?
    Или вы решили решать эту задачу вообще не имея ни малейшего представления о теме? И пришли сюда, что бы вам не зная ни ваших данных, ни вашей функции ни вашей задачи, ни ресурсов вашего компьютера кто-то по озарению ткнул в какой-нибудь метод. И вы ему поверите? По сути в таком случае вы просто попытаетесь переложить на кого-то ответственность за принимаемое решение?
    Ну вы же должны понимать, что по таким совершенно неинформативным признаком нельзя объективно выбрать "правильный метод".
    А если вдруг ваша функция столь сложна, что каждое значение вычисляется примерно 2 часа (что-то слабо себе это представляю. Вы что, на калькуляторе считаете, или как?) то попробуйте подбирать метод сильно упростив вашу функцию, и попробуйте на этой упрощенной модели проверить несколько методов оптимизации. Это же элементарное и естественное решение любого мало-мальски квалифицированного инженера.
    Ответ написан
    4 комментария
  • Можно ли использовать TCP протокол для игрового сервера?

    @rPman
    Во первых, собирай статистику по фреймам, смотри на графиках, почти наверняка это будут периодические пики с превышением времени на доставку данных

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

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

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

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

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

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

    Но главное, сетевой трафик в такой схеме значительно снижается, ведь рассылаются буквально только нажимаемые клавиши и изредка хеш-суммы состояния мира для валидации их корректности (все клиенты и сервер по завершению каждого фрейма должны сравнить состояния друг друга например путем вычисления хеш суммы по отсортированным объектам, всем или по какому то критерию, например попадающим в ячейку матрицы по координатам, если там происходили изменения)
    Ответ написан
    Комментировать
  • Почему работает htaccess на nginx?

    Lynn
    @Lynn
    nginx, js, css
    htaccess не работает в nginx. Возможно у вас там проксирование в apache
    Ответ написан
    Комментировать
  • Почему игра на pygame тормозит?

    @Span4ev Автор вопроса
    Разобрадся. Для тех, кто столкнётся с той же ситуацией, вот пояснение:

    Медленный здесь только я, потому что функцию создания пришельцев
    engine.create_aliens_army(settings, screen, ship, aliens) я запускал в основном цикле While, из-за чего все остальные циклы выполнялись каждую наносекунду. Я перенёс вызов создания армии из основного цикла и всё стало хорошо.
    Следите за тем, где вы вызываете методы.
    Ответ написан
    3 комментария
  • Как изменить значение boolean в бд после определенного времени?

    ну вообще есть таблица с товарами и я планировал сделать такой функционал который покажет информацию о том что это недавно добавленный товар, а потом уже автоматически после определенного времени менять его значение, ну первое что пришло в голову это сделать true, false)

    Тогда даты добавления товара будет более чем достаточно - потом на уровне приложения ты можешь сравнить текущее время и дату добавления товара, и исходя из этого отображать эту плашку.
    Ну либо можешь прямо в SQL-запросе сделать что-то типа
    SELECT id, (created_at > (current_timestamp - '1 day'::interval)) as "is_newly_added" FROM goods
    Ответ написан
    Комментировать
  • Что значит эта строка на СИ/C++?

    Нет, это и есть полная запись - переменная с именем func, которая хранит указатель на функцию, которая принимает double и возвращает double.
    Читать по спирали: https://habr.com/ru/post/100104/

    Если есть возможность, лучше использовать std::function - это читабельнее
    https://en.cppreference.com/w/cpp/utility/function...
    Ответ написан
    2 комментария
  • Какой фреймворк выбрать для моей задачи (пример сайта в вопросе)?

    vabka
    @vabka Куратор тега Веб-разработка
    Подобные веб-приложения называются SPA (single page application).
    Такие сейчас, в основном, делают при помощи одного из: Angular, React, Svelte, Vue. (Самые популярные - Angular и React. Самый наименее популярный - Svelte.)

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

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Если честно, то не совсем понятно чего вы хотите.
    В БД есть логирование. Вот, например PostgreSQL

    Если речь идет о логах hibernate & jpa, то вот, полезная статья:
    https://www.baeldung.com/sql-logging-spring-boot
    Можно установить уровень логирования, а затем например, вывести логи в файл

    Если речь про Spring & Hibernate (про аудирование), например, когда какая сущность была добавлена или обновлена, то есть например, EntityListeners.

    Вот, простой пример:
    @SpringBootApplication
    @EnableJpaAuditing
    public class Application {
      public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
      }
    }


    сущность User -
    @Entity
    @EntityListeners(AuditingEntityListener.class)
    @Table(name = "users")
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE)
        private Long id;
    
        @CreatedDate
        @Column(updatable = false)
        private LocalDateTime created;
    
        @LastModifiedDate
        private LocalDateTime lastModified;
    
    }
    Ответ написан
    2 комментария
  • Может ли материнка убить аккумулятор?

    @evgeniy_lm
    Может ли материнка убить аккумулятор?

    Однозначно нет.

    Сам 10 лет занимался ремонтом радиоаппаратуры и знаю какие бывают "ремонтеры". Есть группа товарищей (которые нам совсем не товарищи) которые пытаются что-то ремонтировать, но у них не очень это выходит вот они и выдумывают несуществующие неисправности

    ЗЫ Если в ноуте сдохла батарея значит ему как минимум 7 лет, а значит он устарел как морально так и физически, нет ни какого смысла пытаться его ремонтировать и модернизировать
    Ответ написан
    3 комментария
  • Разные версии шины видеокарты?

    @Drno
    да, но будет работать со скоростью pci-e 1.0
    Ответ написан
    2 комментария
  • Можете подсказать, как решить подобную задачу по основам дискретной математики и логики?

    Alexandroppolus
    @Alexandroppolus
    кодир
    A||(B&&C) равно 1, если А = 1 или B&&C = 1

    P(А = 1) = p
    P(B&&C = 1) = qr

    P(A||(B&&C) = 1) = p + qr - pqr = p+(1-p)qr
    Ответ написан
    Комментировать