• Не могу понять что я делаю не так с select?

    @holllop Автор вопроса
    szQocks, был прав я делал скрипт несмотря что у меня нет значений departament.id и departament.name
    Так что правильный скрипт выглядит вот так
    const departmentSelect = document.querySelector('#department');
    
    fetch('http://example.com/departament')
      .then(response => {
        if (!response.ok) {
          throw new Error('Ошибка загрузки данных');
        }
        return response.json();
      })
      .then(data => {
        const options = data.map(item => {
          const option = document.createElement('option');
          option.value = item.departament; // значение option
          option.textContent = item.departament; // текст варианта
          return option;
        });
        departmentSelect.append(...options);
      })
      .catch(error => {
        console.error(error);
        // Обработать ошибку
      });
    Ответ написан
    Комментировать
  • Как работает backend на примере стеков graphQL и Apollo, nodejs, express?

    @holllop
    Давайте по порядку разберем ваши вопросы:
    1) Если у вас есть данные в формате JSON и вы хотите их хранить в базе данных, то самый простой способ - это использовать базу данных, которая поддерживает JSON, например PostgreSQL с расширением JSONB. Вы можете сохранить JSON-данные в столбце с типом данных JSONB и индексировать поля внутри JSON для быстрого доступа к данным. Также можно использовать ORM (Object-Relational Mapping), такой как Sequelize или TypeORM, для работы с JSON в базе данных.
    2) GraphQL - это язык запросов и спецификация, которая позволяет клиентским приложениям запрашивать только необходимые данные с сервера. Однако, GraphQL также может использоваться в качестве API-сервера, который обрабатывает запросы от клиентов, возвращает запрошенные данные или выполняет мутации для изменения данных. Таким образом, GraphQL может использоваться как язык запросов, так и как средство создания API.(я сам часто смотрю в сторону Graph))
    3) Apollo - это набор библиотек для работы с GraphQL на клиентской и серверной стороне. Apollo Client - это библиотека для работы с GraphQL на стороне клиента, которая предоставляет инструменты для выполнения запросов к серверу GraphQL и управления данными в приложении. Apollo Server - это библиотека для работы с GraphQL на стороне сервера, которая позволяет создавать GraphQL API и обрабатывает запросы от клиентского приложения. Apollo Server и Apollo Client - это часто используемые инструменты для работы с GraphQL.
    4) API-сервер на основе GraphQL может быть реализован с использованием различных инструментов, таких как GraphQL.js, Apollo Server, Express.js или других. GraphQL сам по себе является спецификацией языка запросов, а Apollo Server и другие инструменты предоставляют реализацию этой спецификации для создания API-сервера. Node.js и Express.js могут использоваться как основа для создания и обработки запросов API-сервера на базе GraphQL.
    5) Apollo Server - это реализация спецификации GraphQL, которая предоставляет инструменты для разработки сервера GraphQL. Он обрабатывает запросы от клиентов, анализирует их и выполняет запросы к базе данных или другим источникам данных. Таким образом, Apollo Server является часто используемым инструментом для создания сервера GraphQL, который предоставляет мощные возможности для работы с GraphQL-схемой и запросами.
    Ответ написан
    Комментировать
  • Как можно быстро подключить шрифты в css?

    @holllop
    Так давай по полкам всё. Я конечно сомневаюсь, что подобного вопроса не было, но всё же
    1. Локальное хранение шрифтов: Вы можете скачать шрифт в нужном формате (например, WOFF или TTF) и сохранить его в своем проекте. Затем в CSS вы можете использовать правило @font-face, чтобы подключить шрифт, указывая путь к файлу на вашем сервере. Например:

    @font-face {
      font-family: 'MyFont';
      src: url('/path/to/font.woff2') format('woff2'),//пример пути
           url('/path/to/font.woff') format('woff');//пример пути
    }

    2.Есть вариант автоматизации этих процессов. Для этого используйте инструментов сборки и управления зависимостями(например GULP или WEBPACK)
    3.Есть ещё возможность. Внедрение шрифтов через сервисы веб-шрифтов: Некоторые сервисы веб-шрифтов, такие как Google Fonts или Adobe Fonts, предоставляют быстрый и простой способ подключения шрифтов на вашем сайте, предоставляя вам готовый код CSS для вставки на ваш сайт.
    Ответ написан
    4 комментария
  • Как правильно RewriteRule в htaccess?

    @holllop
    Если я всё правильно понял, то чтобы ваше правило RewriteRule работало на адресе site.ru/RAZDEL/kupim-chistye-othody_3.html и других подобных адресах с разделами, вам нужно добавить модификатор NC (No Case) в ваше правило RewriteRule. Модификатор NC указывает на то, что сопоставление шаблона должно быть регистро-независимым.

    Вот как будет выглядеть измененное правило RewriteRule:

    RewriteRule ^[a-zA-Z\-_]+_([\d]+)+\.html index.php?id=$1 [L,NC]

    Добавив модификатор NC, строка ^[a-zA-Z\-_]+_([\d]+)+\.html будет соответствовать URL-адресам с разделами независимо от их регистра.

    Теперь ваше правило RewriteRule будет работать на адресе site.ru/razdel/kupim-chistye-othody_3.html, site.ru/RAZDEL/kupim-chistye-othody_3.html и любых других адресах с разделами.
    Ответ написан
    2 комментария
  • Каковы возможные пути развития?

    @holllop
    Так прочитав всё выше сказанное у меня сложилось впечатление, что вы уже довольно умелый пользователь C++/Qt(куда порог вхождения по моему субъективному мнению довольно высок). Теперь по вопросу
    Спустя несколько месяцев ситуация повернулась таким образом, что человек к которому меня и брали в помощь (он же и ментор) уходит с этой работы и моё положение становится несколько неустойчивым )

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

    Ну я думаю, что спрос может конечно и выше, но стоит ли то того ? Если вы очень сомневаетесь или очень хотите себя попробовать себя в другой отрасли, то почему бы не сделать проект и не понять ваше или нет ? Для вэба это может быть сайт визитка, а для мобильных приложений это игра или приложение. Но вы же понимаете, что вам для новой отрасли нужно учить языки и писать проекты для портфолио ? + не факт что вы не попадёте в так называемую "галеру".
    Да и будет ли интересен 30-летний джуниор там..?

    Ну мне кажется навыки важнее возраста.
    Мне кажется вам будет мудрее выбрать развитие в уже существующих навыках. Потому, что если C++/Qt специалистов хоть и много, но не больше чем вэб или мобильных.
    Ответ написан
    Комментировать
  • Как попробовать IT-профессию и понять для тебя ли?

    @holllop
    Что ж и я решил ответить на вопрос хоть и молод и зелен.
    Часто слышу об IT и как важны обществу программисты или компьютерщики, как мы , обыватели, их называем.
    Действительно важна эта отрасль так как в ней очень много специалистов, и действительно они важны. Так как если их не было, то не было бы социальных сетей, программ, автоматизированной работы на заводах ипд. итд.
    Очень много внимания к ним государства, СМИ, женщин. Со стороны это кажется странно-чрезмерно преувеличенным.
    Действительно иногда кажется, что проблема гиперболизирована. Но скажу что наверное лучше бы не бло внимания(разве что только со стороны женщин:)).
    И мне стало интересно, можно ли как-то взрослому познакомиться и понять IT-профессии? Не в теории, а практически? Можно ли это сделать через онлайн курсы или надо вживую?
    Так как IT профессий много и все они рассчитаны на разное, то для начала бы хотя бы определится чего вы хотите в итоге после знакомства(допустим какую-то свою мини программу для повседневности или телеграмм бота своего для своих нужд или личный сайт или что-то ещё). Насчёт онлайн курсов, это из области вечных вопросов, что лучше самому или через курсы ? Так как тут всё упирается в "ну можно и самому и информация доступна и бесплатно" или в "Да информации полно, но для меня слишком сложно\неструктуризировано\информация слишком противоречива\ самому слишком долго", я скажу что тут зависит всё от человека и его стремлений, потому что как самоучка может стать отличным специалистом, так и пройдя курсы вы можете не научиться не чему.
    У меня же еще есть вопрос - есть какие-то навыки из IT-сферы, которые можно было бы освоить и использовать в других профессиях? Если в целом профессию не получится или не захочется освоить, но какие-то элементы покажутся полезными?
    Тут конечно смотря какую профессию вы осваивали, но всё же лучше будет привести пару примеров. Примеры: вы сможете уменьшить бумажную работу в офисе(изучали VBA и с помощью его скриптов можно облегчить использование Word и Excel); вы изучали Python тут у вас целая россыпь возможностей автоматизации обычных процессов на своём компьютере, лень перебирать данные в папке Python поможет; изучали работу сисадмина ? отлично дома можете настроить сеть со всякими интересными вежами вроде удалённого доступа к принтеру, привязку всех жителей вашего дома к системе отслеживания где они сейчас(если что это для того что бы не волноваться)); примеров много и они будут разные это лишь те что пришли мне в голову, не буду брать такие вещи как уверенное пользование ПК т.к. я не понимаю как оно может быть не уверенным(клавиатура ещё не кого не кусала).
    И что важно в вашей профессии? Математический склад ума? Ведь это же не о любви к цифрам?

    Как не странно, но умение думать очень важно ). Не думаю что прям математический скорее аналитический, у вас всегда будет какой-то объём информации который вам нужно будет проанализировать и понять что с этим делать) Не думаю что программирование не равно любовь к цифрам, да есть алгоритмы, но чтобы прям к цифрам. Опять таки смотря какая IT профессия.
    Ответ написан
    1 комментарий
  • Какой стек необходим для изучения GraphQL и Apollo?

    @holllop
    Ну смотри. Если ты собираешься изучить работу с GraphQL и Apollo, то нужны хотя бы базовые знания по Node.js, так как Apollo в значительной степени связан с экосистемой Node.js и использует его для создания серверов GraphQL.
    Теперь к основным темам которые желательно знать(список не полный тут только те, что я вспомнил):
    1. Express.js: Express является популярным фреймворком для Node.js, и его знание будет полезным при создании сервера GraphQL с помощью Apollo. Рекомендуется изучить основы Express.js, такие как маршрутизация, обработка запросов и ответов, и middleware.
    2. Работа с базами данных: Apollo и GraphQL часто используются для запросов и манипуляций данных в базах данных. Поэтому полезно знать основы работы с базами данных в Node.js, такие как использование ORM (например, Sequelize или Mongoose), выполнение запросов SQL или MongoDB и работу с моделями данных.
    3. Асинхронное программирование: В GraphQL и Apollo запросы часто выполняются асинхронно. Поэтому знание принципов асинхронного программирования в JavaScript, таких как использование промисов, асинхронных функций и async/await, будет полезным.
    4. REST API: Хорошее понимание понятий и принципов работы с REST API также может быть полезным при изучении GraphQL, так как GraphQL может быть использован как альтернатива REST API. Рекомендуется изучить основы RESTful API и понимание различий между REST и GraphQL.
    Это те что мне первые приходят на ум возможно дополню список
    Ответ написан
    3 комментария
  • Django-templates + JS: что не так с кнопкой закрытия попапа?

    @holllop
    Ну смотри на первый взгляд код, связанный с кнопкой закрытия попапа, выглядит правильным. Он использует событие hide.bs.modal, которое срабатывает при закрытии модального окна, и выполняет необходимые действия, чтобы обновить значения на странице.
    Но, скорее всего проблема может быть связана с другим кодом, например, с обработчиками кликов на кнопку или с CSS стилями для модального окна. (да знаю звучит глупо, но проверь).
    Уточни, как именно не работает кнопка закрытия попапа. Не происходит ли событие клика на кнопку вообще, или есть ли какая-то другая ошибка или неправильное поведение?
    Также полезно будет увидеть остальной JS код, который связан с попапом, чтобы понять, может быть, есть какие-то конфликты или проблемы в других частях кода.
    Ответ написан
    Комментировать
  • Не понимаю как правильно ли использую функцию DISTINCT?

    @holllop Автор вопроса
    Для базы данных PostgreSQL это будет выглядеть так
    WITH temp_table AS (
      SELECT printer, 
             CONCAT('{', STRING_AGG(QUOTE_LITERAL(materials), ','), '}') AS materials
      FROM printers 
      GROUP BY printer
    )
    SELECT CONCAT('{"printer":"', printer, '", "materials":', materials::json, '}') AS json_format 
    FROM temp_table;

    В моём случая (я использую Node.js для создания API) это выглядит вот так
    const getPrinterMaterials = async () => {
      const query = `WITH temp_table AS (
        SELECT printer, CONCAT('{', STRING_AGG(QUOTE_LITERAL(materials), ','), '}') AS materials
        FROM printer_materials
        GROUP BY printer
      )
      SELECT CONCAT('{"printer":"', printer, '", "materials":', materials::json, '}') AS json_format
      FROM temp_table;`;
      //где-то что-то не так с запросом т.к. получаю ошибку  неверный синтаксис для типа json
      const client = await pool.connect();
      try {
        const result = await client.query(query);
        return result.rows.map(row => row.json_format);
      } finally {
        client.release();
      }
    };
    
    module.exports = {
      getPrinterMaterials,
    };

    <
    const express = require('express')
    const bodyParser = require('body-parser')
    const cors = require('cors')
    const db = require('./pool');
    const app = express()
    const port = 3000
    
    app.use(bodyParser.json())
    app.use(
     bodyParser.urlencoded({
        extended: true,
      })
    )
    
    app.use(cors())
    
    app.get('/printer_material', db.getPrinterMaterials);
    Ответ написан
    Комментировать
  • Как исправить CORS ошибку Access to fetch at ${API} from origin ${CLIENT} has been blocked by CORS policy?

    @holllop
    Ну я когда столкнулся с подобной проблемой просто поставил пакет CORS на сервер(node.js) и всё. Если что это делается командой npm install cors
    Ответ написан
  • Какие есть аналоги codewars на русском?

    @holllop
    Почему было не загуглить ищётся в 3 секунды. Вот тебе список
    1. Exercism (https://exercism.io/ru): Exercism предлагает обширную коллекцию задач на различные языки программирования и обеспечивает систему проверки решений. Вы можете выбрать задачи в соответствии с вашим уровнем и языком программирования и получить обратную связь от других разработчиков.
    2. Codebattle (https://codebattle.hexlet.io/): Codebattle от Hexlet - это онлайн-среда для решения задач по программированию. Он предлагает алгоритмические задачи на нескольких языках программирования и позволяет соревноваться с другими разработчиками.
    3. Sphere Online Judge (SPOJ) (https://www.spoj.com/): SPOJ - это платформа для онлайн-соревнований по программированию. Здесь вы можете найти широкий выбор разнообразных задач, в том числе на русском языке.
    Это аналоги codewars.
    Ну и для питона
    edX (https://www.edx.org/learn/python)
    Ответ написан
    Комментировать
  • Как сделать структуру баз данных?

    @holllop Автор вопроса
    Нужно создать промежуточную таблицу
    CREATE TABLE printer_material (
      printer_id integer REFERENCES printers (id),
      material_id integer REFERENCES material (id),
      PRIMARY KEY (printer_id, material_id)
    );

    и добавить связи
    INSERT INTO printer_material (printer_id, material_id)
    VALUES
      (1, 1),
      (2, 1),
      (2, 2),
      (3, 1),
      (3, 2),
      (3, 3);

    Связь многие к многим
    Ответ написан
    Комментировать
  • Не могу понять, что не так с innerHTML?

    @holllop Автор вопроса
    if (record) {
        wrapper1.innerHTML = 
        `<div> <p>Вы точно хотите удалить запись:</p> <table> <tr> <th>Порядковый номер записи:</th> <th>Номер шахты:</th> <th>Название шахты:</th> <th>Адрес шахты:</th> <th>ФИО директора:</th> <th>Номер телефона:</th> </tr> <tr> <td>${record.id_k1}</td> <td>${record.n_mine}</td> <td>${record.name_mine}</td> <td>${record.adress}</td> <td>${record.full_name_of_direcor}</td> <td>${record.phone_number}</td> </tr> </table> <button type="submit" name="submit" class="dle">Удалить запись</button> </div>`; //это всё должно быть в одной строке
      } else {
        wrapper1.innerHTML = 'Записи с таким ID не найдено';
      }
    });

    Не знаю может это работает и при многострочном вводе (и это особенность из-за моего редактора кода)
    Ответ написан
  • Как сформировать AJAX запрос для базы данных?

    @holllop Автор вопроса
    Вот так:
    const button = document.querySelector('#button');
    const closeButton = document.querySelector('#closeButton');
    const form = document.querySelector('.form');
    const popup = document.querySelector('.popup');
    const table = document.getElementById('mine_info');
    
    button.addEventListener('click', () => {
      openForm();
    });//вызов функции открытия формы
    
    closeButton.addEventListener('click', () => {
      closeForm();
    });//вызов функции закрытия формы
    
    const httpRequest = (url, options) => {
      return fetch(url, options)
        .then(response => response.json())
        .then(console.log)
        .catch(console.error);
    };
    
    const postOptions = {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      }
    };//тело Post-запрос
    
    const getOptions = {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      }
    };//тело Get-запрос
    
    const postRequest = data => {
      return httpRequest('http://данные:3000/mine_info', {
        ...postOptions,
        body: JSON.stringify(data)
      });
    };//указания при POST-запросе
    
    const getRequest = () => {
      return fetch('http://данные:3000/mine_info', getOptions)
        .then(response => response.json())
        .then(data => {
          updateTable(data);
        })
        .catch(console.error);
    };//указания при GET-запросе
    
    const updateTable = data => {
      data.forEach(item => {
        const newRow = document.createElement("tr");
        for (let key in item) {
          const newCell = document.createElement("td");
          newCell.textContent = item[key];
          newRow.appendChild(newCell);
        }
        table.appendChild(newRow);
      });
    };//создание константы, где будет происходить действия с таблицей
    
    window.onload = function() {
      getRequest();
    };//для того чтобы при загрузке страницы происходил GET-запрос
    
    const openForm = () => {
      form.classList.add('open');
      popup.classList.add('popup_open');
    };//функция открытия формы
    
    const closeForm = () => {
      form.classList.remove('open');
      popup.classList.remove('popup_open');
    };//функция закрытия формы
    
    const formHandler = (e) => {
      e.preventDefault();
      const data = Object.fromEntries(new FormData(e.target).entries());
      postRequest(data)
        .then(() => {
          closeForm();
          location.reload();
        })
        .catch(console.error);
    };//отправка данных из формы
    
    form.addEventListener('submit', formHandler);

    А JSON формируется благодаря Node.js
    const Pool = require('pg').Pool
    const pool = new Pool({
      user: '',
      host: '',
      database: '',
      password: '',
      port: 5432,
    })//Данные для подключения к БД
    
    const getMineinfo = (request, response) => {
        pool.query('SELECT * FROM mine_info', (error, results) => {
           if (error) {
             throw error
        }
        response.status(200).json(results.rows)
         })
    }//Создание константы getMineinfo, где вызывается SQL-команду "SELECT", для того чтобы взять данные из БД 
    
    const createRow = (request, response) => {
        const { id_k1, n_mine, name_mine, adress, full_name_of_direcor, phone_number } = request.body
      
        pool.query('INSERT INTO mine_info (id_k1, n_mine, name_mine, adress, full_name_of_direcor, phone_number) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *', [id_k1, n_mine, name_mine, adress, full_name_of_direcor, phone_number], (error, results) => {
          if (error) {
            throw error
          }
          response.status(201).send(`User added with ID: ${results.rows[0].id}`)
        })
      }//Создание константы createRow, где вызываеться SQL-команда "INSERT INTO", для взятия информации из формы и записи её в БД 
    
    module.exports = {
        getMineinfo,
        createRow,
    }//Берём из файла.js файла

    //файл.js
    const express = require('express')
    const bodyParser = require('body-parser')
    const cors = require('cors')
    const db = require('./queries')
    const app = express()
    const port = 3000
    
    app.use(bodyParser.json())
    app.use(
     bodyParser.urlencoded({
        extended: true,
      })
    )
    
    app.get('/', (request, response) => {
        response.json({ info: 'Node.js, Express, and Postgres API' })
    })
    
    app.use(cors())
    
    app.get('/mine_info', db.getMineinfo)
    app.post('/mine_info', db.createRow)
    
    app.listen(port, () => {
        console.log(`App running on port ${port}.`
    )})
    Ответ написан
    Комментировать
  • Не работает терминал VS Code, не правильное имя пользователя, как исправить?

    @holllop
    У вас ошибка в команде вы опечатались вы написали
    C:/User/олина/AppData/Local/Microsoft/WndowsApps/python3.11.exe "e:/ 0101/ed.py"
    , а нужно
    <code>C:/User/Полина/AppData/Local/Microsoft/WndowsApps/python3.11.exe "e:/ 0101/ed.py"</code>
    . Конечно пользователя олина нет.)
    Ответ написан
    3 комментария
  • Как сверстать блок с текстовыми данными?

    @holllop
    Ну мне кажется дивами. Структура у вас будет примерно такая:
    <div>
    <p>Текст</p>
    <hr>
    <p>Следующий текст</p>
    <hr>
    <p> И.т.д текст</p>
    </div>

    Но при таком походе нужно задать стили этим элементам
    Ответ написан
    Комментировать
  • Сколько nav`ov может быть на сайте?

    @holllop
    Мне кажется, что такую навигационную панель легче сделать с помощью библиотек (например bootstrap). Ответ на второй вопрос, мне кажется что nav'оv может быть сколько угодно как и других тегов (не уверен не много в своём ответе на второй вопрос ).
    Ответ написан
    Комментировать