• В какой структуре данных хранятся страницы-конструкторы сайта в БД?

    @alexalexes
    Неструктурированный контент страницы в базе хранится в виде HTML (в широком смысле - в XML) как текст. Когда он передается для отображения пользователю, то преобразуется в DOM-модель.
    Но ничто вам не мешает выбрать другую нотацию для хранения, которая поддерживает описание древовидной или графовой структуры объектов - JSON, или, на худой конец, делать сериализацию DOM-модели в любой формат среды разработки, которая она поддерживает.
    Вы можете пойти дальше, и в базе сделать такую структуру таблиц, чтобы хранить DOM со всеми свойствами и нюансами, но так никто не делает - это слишком медленно будет работать.
    Ответ написан
    Комментировать
  • В какой структуре данных хранятся страницы-конструкторы сайта в БД?

    @Everything_is_bad
    json, а нормально спроектировать отношения сущностей для подобного ты всё равно не сможешь, да тут скорее всего и не нужно такое
    Ответ написан
    Комментировать
  • Как правильно спроектировать БД услуги с изменяемой ценой в зависимости от выбранных опций?

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

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

    GavriKos
    @GavriKos Куратор тега Unity
    1. Перед спавном проверять коллизии. Если есть коллизия - выбирать другое место
    2. Спавнить по умному - например, по сетке. Или вычислять точку спавна на основе уже имеющихся машин.

    У вас же тупой простой рандом - в нем нет никаких логик проверок - поэтому увы
    Ответ написан
    6 комментариев
  • Как считывать состояние 300 цепей (и подсоединить к Arduino/Pi) на состояние замкнуто/разомкнуто?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Классически - матрицей.
    На каждом пересечении геркон и диод. На горизонтали подаётся развёртка, обычно через дешифратор, с вертикалей снимается состояние.
    Ответ написан
    5 комментариев
  • Как лучше всего хранить данные о группах в бд?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    table resources
    user_name, user_id, w1_total, w1_used, w2_total, w2_used, w3_total, w3_used, w4_total, w4_used, w5_total, w5_used

    table groups
    user_id, group_name, w1,w2,w3,w4,w5, current_task
    Ответ написан
    Комментировать
  • По какой формуле можно высчитать делитель, с нужным остатком от деления?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ну, раз нет никаких дополнительных требований, то делитель равен самому числу, остаток 0.
    Ответ написан
    1 комментарий
  • Как остановить выполнение функции при нажатии на input?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    var timeoutId;
    // ...
    timeoutId = setTimeout(...
    // ...
    timeoutId = setTimeout(...
    // ...
    function stop() {
      clearTimeout(timeoutId);
    }
    document.getElementById("placeholder_text").click = stop;


    Ну и не называй функцию do, есть ключевое слово do ... while.
    Ответ написан
    Комментировать
  • Как эффективно заменить текущий HTML элемент на другой?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    https://jsfiddle.net/Lfst8wog/1/
    const childElement = document.getElementById('child'); // находим потомка
    const parentElement = childElement.parentNode; // находим родителя
    
    // Создаем новый элемент
    const newElement = document.createElement('p');
    newElement.textContent = 'Новый элемент';
    
    // Заменяем старый элемент на новый
    parentElement.replaceChild(newElement, childElement);


    Или так (https://jsfiddle.net/Lfst8wog/)
    const oldElement = document.getElementById('old');
    
    // Создаем новый элемент
    const newElement = document.createElement('div');
    newElement.textContent = 'Новый элемент';
    
    // Заменяем старый элемент новым
    oldElement.replaceWith(newElement);


    const oldElement = document.getElementById('old');
    
    oldElement.replaceWith(document.createRange().createContextualFragment(`
      <div class="box box2">
        <p1>hello world</p1>
      </div>
    `));
    Ответ написан
    3 комментария
  • Нужны ли везде дивы и как должна выглядеть верстка?

    Бри́тва О́ккама (иногда ле́звие О́ккама) — методологический принцип, в кратком виде гласящий: «Не следует множить сущее без необходимости» (либо «Не следует привлекать новые сущности без крайней на то необходимости»).

    Это главный принцип и верстки, и программирования.

    1. Оборачивайте элемент в div (или другой контейнер), если вы точно знаете, зачем вы это делаете, и без этого нельзя обойтись.

    2. Не вставляйте везде бездумно div. Почитайте про семантическую вёрстку, и используйте разные элементы-обёртки для разных типов контента.

    https://htmlacademy.ru/blog/html/semantics
    Ответ написан
    1 комментарий
  • Как упростить метод, выполняющий операции для всех других методов класса, если он получается слишком раздутым?

    vhood
    @vhood
    Не забывайте отмечать решения
    Здесь Вы принимаете type
    public function makeRequest(array $args, string $type) {
    Здесь выполняете логику в зависимости от typeif($type === "source1") {

    Для каждого type нужно создать класс, который будет выполнять логику, описанную в его блоке if.
    пример

    class SpecificTypeApiService implemets ApiServiceInterface
    {
        public function send()
       {
    //код ниже просто скопирован, стоит вынести что-то в параметры, что-то в конструктор и сделать код более элегантным
    //можно сделать абстрактный класс и делегировать ему общий для разных type (сервисов) функционал
        $proxiesArr = array('72.37.217.3:4145', '174.77.111.196:4145');
              
              $randProx = array_rand($proxiesArr, 1);
              
              $proxyIp = $proxiesArr[$randProx];
            
    //      $proxyIp = '174.77.111.196:4145';
            $url1 = $args[0] . $args[1];
                $headers = [
                'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.105 YaBrowser/21.3.3.230 Yowser/2.5 Safari/537.36'
                ];
    
                $curl = curl_init();
    
            curl_setopt($curl, CURLOPT_PROXY, $proxyIp);
            curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
            curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_VERBOSE, 1); 
            curl_setopt($curl, CURLOPT_POST, false);
            curl_setopt($curl, CURLOPT_URL, $url1);
    
            $result = curl_exec($curl);
    
            if(curl_exec($curl) === false)
            {
            echo 'Ошибка curl: ' . curl_error($curl);
            } else {
            echo 'Операция завершена без каких-либо ошибок';
            }
    
            return $result;
       }
    }


    После, с помощью DI и полиморфизма, отрефакторить существующий код следующим образом:

    Здесь Вы принимаете сервис вместо type
    public function makeRequest(array $args, ApiServiceInterface $apiService) {

    Здесь выполняете логику, но выполнение делегируете сервису$apiService->send();

    Стоит получше подумать над именами классов, переменных и функций.
    Ответ написан
    Комментировать
  • Как упростить метод, выполняющий операции для всех других методов класса, если он получается слишком раздутым?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Сделать декомпозицию и разбить на несколько методов. Или даже на целый класс с группой различных методов с разными опциями.
    Ответ написан
    Комментировать
  • Axios vs Fetch NodeJS - CPU and Memory usage сравнение?

    liaFcipE
    @liaFcipE
    Зачем вы сравниваете эффективность таких вещей? Там же разница будет на уровне погрешности (по моему мнению).

    Я на нашел сходу инфы о том, что нативный fetch основан на node:http, мне казалось это отдельный WebAPI, со своей спецификацией.

    Просто выберите то, что удобнее и проще. Fetch прост, с минимум фич, в то время как Axios - полноценный фреймворк, который что только не умеет.

    В крайнем случае - напишите бенчмарк, дело 5ти минут, но сомневаюсь, что там будет что-то интересное.
    Ответ написан
    Комментировать
  • Почему выдает ошибку 404 NGINX?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Потому что у вас зачем-то в локейшене /api/category/ завершающий /, а он там не нужен. В текущем виде запрос /api/category обрабатывается локейшеном /.
    Ответ написан
  • Стоит ли указывать паспортные данные в анкете соискателя?

    @Drno
    нет конечно. если Вы не хотите 100500 кредитов на Ваше имя от левых организаций
    Ответ написан
    6 комментариев
  • Стоит ли указывать паспортные данные в анкете соискателя?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Нет, не нормально. В нормальных местах такое отдельно и необязательно указывается.
    также его аффилированным лицам

    Попахивает продажей клиентской базы, жди спама
    Ответ написан
    7 комментариев
  • Почему в данном случаи используется enum, а не обычный интерфейс?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Ну вот так решил разработчик. Мало ли зачем? У него были какие-то причины - никто их не знает. И вообще, смысл спрашивать в интернете мнение рандомного куска кода, тем более вообще без контекста, а не у самого разработчика этого кода?
    Ответ написан
    3 комментария
  • Как пометить метод Main атрибутом в новейших версиях?

    petermzg
    @petermzg
    Самый лучший программист
    Если вам нужно задавать атрибуты для main. Тогда и добавьте его в проект.
    Top-level statements это для новичков, для облегчения вхождения.
    Просто скрывает точку входа, чтобы каждый раз не писать конструкцию.
    public static class HelloClass 
          {  
               public static void Main(string[] args) 
               { 
                  
               } 
           }

    Вот тут можно задать точку входа.
    6707b12d49bd5046919043.png
    Ответ написан
    1 комментарий
  • Как стать начинающим программистом в текущих реалиях?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Куда легче всего пробиться в программирование?

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

    Мне вообще всё равно, куда идти в плане доходов (лишь бы на еду хватало)

    Почему тогда именно ИТ?

    поскольку знаю, что я не выдающийся человек ни в чём

    Бизнес выдающихся и не ищет в основном.

    - Теоретический опыт по книгам по Java,

    Подозреваю, что сейчас это знает каждый школьник.

    Школьники сейчас читать-то не умеют многие.

    Что вы мне посоветуете?

    Ещё раз хорошо подумать нужно ли вам именно ИТ. Во-первых, в силу хайпа сюда сейчас ломятся все подряд, соответственно прорваться на первое рабочее место очень непросто. Во-вторых, в отрасли довольно большая концентрация тех, кто программирование любит, с такими тяжело конкурировать, а чем выше будете забираться, тем чаще придётся. Есть множество работ, куда попасть легче и где хватать будет не только на еду.
    Ответ написан
    2 комментария
  • Что такое .Net и .Net framework?

    .NET Framework - это старая платформа, которая изначально в 2000х появилась.
    Потом в 2016 или типа того году появился .NET Core и .NET standart.

    .NET Core - новая, кроссплатформенная платформа, в которую изначально завозили всякие новые штуки типа нового JIT, вносили новые API, убирали старые, завозили новые фичи C#.

    .NET standart - спецификация, которая позволяет делать библиотеки, которые работают и на .net framework и на .net core с гарантией совместимости.

    Часть нововведений .NET Core вернулась в .NET Framework, а часть - нет.

    Потом произошёл ребрендинг и .NET Core переименовали в просто .NET, а .netstandard прекратили обновлять, тк все новые api теперь идут только в .NET, но не в .NET Framework.

    Как я понял .Net и .Net framework это программы, которые преобразуют папку с проектом в исполняемый файл, другими словами говоря - компиляторы.

    Не совсем. Есть две вещи:
    1. .NET runtime и .NET SDK
    2. .NET Framework и .NET Framework DevPack
    То что слева - это только рантайм, он отвечает за запуск уже собранных приложений.
    А вот в sdk уже входит компилятор и все необходимые для сборки приложений библиотеки.

    Сами по себе они отличаются тем, что .Net framework создаёт файл, запускающейся только на винде, а .Net - и на маке и на линуксе.


    Различие между .NET Framework и .NET я уже описал выше, но повторю:
    1. .NET Framework - старый/устаревший, менее производительный, и только windows (mono упоминать не будем)
    2. .NET с номером - новый/современный, более производительный, работает на разных платформах.

    Для нового проекта стоит выбирать только номерной .NET (сейчас вроде 9), если у тебя нет весомых доводов для выбора .NET Framework.
    Ответ написан
    4 комментария